我正在使用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'
;