Antlr4 在9-9的算术运算中,如何编写区分-9和-operator的lexer规则?
我正在为计算器应用程序使用Antlr4编写一个简单的表达式解析器。我不知道如何编写区分数字9和算术表达式9-9的语法。非常感谢您的任何帮助 这是我的语法表达式。g4: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 :
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