我正在使用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
中的Number,但应该是完全算术运算。
但是-9 + 9
可以正常工作。
答案 0 :(得分:2)
-9只是一个表达式。因此,只需执行以下操作:
expression
: SUBOPER expression
| expression ADDOPER expression
| expression SUBOPER expression
| NUMBER
;
并从-
中删除NUMBER
:
NUMBER
: [1-9] [0-9]* ( '.'DIGIT+ )?
| '0'? '.' DIGIT+
| '0'
;