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

时间:2019-04-10 06:46:47

标签: antlr4

我正在使用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可以正常工作。

1 个答案:

答案 0 :(得分:2)

-9只是一个表达式。因此,只需执行以下操作:

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

并从-中删除NUMBER

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