Antlr4 在9-9的算术运算中,如何编写区分-9和-operator的lexer规则?

Antlr4 在9-9的算术运算中,如何编写区分-9和-operator的lexer规则?,antlr4,Antlr4,我正在为计算器应用程序使用Antlr4编写一个简单的表达式解析器。我不知道如何编写区分数字9和算术表达式9-9的语法。非常感谢您的任何帮助 这是我的语法表达式。g4: grammar expression; expression = expression ADDOPER expression | expression SUBOPER expression | NUMBER; /* lexical rules */ ADDOPER :

我正在为计算器应用程序使用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
 : [1-9] [0-9]* ( '.'DIGIT+ )? 
 | '0'? '.' DIGIT+ 
 | '0' 
 ;

您好@bhart,我想,我错过了沟通,问题是当我将
9-9
作为上述语法的输入时,它不匹配
-
作为运算符,而是匹配
-9
作为数字。所以我的算术表达式失败了。我的前缀树应该像
操作符(-),数字(9),数字(9)
但结果是
数字(9),数字(-9)
。是的,我明白了。我建议的更改应该可以修复它。我建议的语法将正确解析
9-9
9-9
-9+9
,很高兴听到,欢迎@SaravananRamupillai