如何编写在 9 - 9 的算术运算中区分 -9 和 - 运算符的词法分析器规则



我正在使用Antlr4为计算器应用程序编写一个简单的表达式解析器。我不知道如何编写区分数字 -9 和算术表达式 9 - 9 的语法。非常感谢任何形式的帮助

这是我的语法表达式.g4:

grammar expression;
expression = expression ADDOPER expression
             | expression SUBOPER expression
             | NUMBER;
/* lexical rules */
ADDOPER     :'+';
SUBOPER     :'-';
NUMBER         : -?[1-9]+ [0-9]*('.'DIGIT+)? |'0'?('.'DIGIT+) |'0' ;

上述语法的问题在于,它在算术表达式9 - 9中将-9匹配为数字,但这应该是完整的算术运算。

-9 + 9工作正常。

-9 只是一个表达式。因此,只需这样做:

expression
 : SUBOPER expression
 | expression ADDOPER expression
 | expression SUBOPER expression
 | NUMBER
 ;

并从NUMBER中删除-

NUMBER
 : [1-9] [0-9]* ( '.'DIGIT+ )? 
 | '0'? '.' DIGIT+ 
 | '0' 
 ;

最新更新