微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何有效地进行语法分析/解析?

如何解决如何有效地进行语法分析/解析?

我的任务是手动实现一个解析器,因此使用解析器生成器是毫无疑问的。但是我只是找不到一种有效的方法来执行语法分析。我已经设法“手动”完成了,但是我担心这不仅效率低下,而且还有一些极端的情况,使它行不通。

假设我有一种伪语言,其中的变量由以下语法定义:

DECLARE-VAR. VARNAME.

同时,该语言还确定,对于算术运算,每个算术运算符必须在空格之前和之后。所以 X - Y是正确的,但X-Y错误的。

我想构建一个解析器(以Java为参考),逐行分析源代码,并告诉我一行是否有问题。

我们已经在这里发生了冲突,因为我声明DECLARE-VAR是有效的语法,同时还说-应该在空格之前和之后。

所以我用以下方法手动检查这种情况:

if(!linetoCompare.toupperCase().matches("[A-Z]+\\-[A-Z]+.*$") && linetoCompare.contains("-")){
                        char[] chararr = linetoCompare.tochararray();
                        boolean problemWithOperator = false;
                        for(int i = 0; i < chararr.length;i++){
                            if(chararr[i] == '-' && (chararr[i-1] != ' ' || chararr[Math.min(chararr.length -1,i+1)] != ' ')){
                                System.out.println("A minus sign must be preceded and followed by white space")
                            }
                        }
                        
                    }

在大多数情况下都可以使用,但是如果我要排线的话

DECLARE-VAR. VARNAME. 1-2

我的程序不会认为这是一个问题,因为该行与[A-Z]+\-[A-Z]+相匹配,尽管事实上1-2会因为两者之间没有空格而引发错误

所以我想知道,有没有一种更简单的方法可以做到这一点呢?我当时正在考虑逐个单词分解所有内容,但是如果我只能一一检查它们,或者同一行中出现多个问题,我想不出一种检查正确字符的好方法。 / p>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。