我正在为计算器应用程序使用Antlr4编写一个简单的表达式解析器。我不知道如何写一个区分数字-9和算术表达式9-9的语法。
这是我的语法expression.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
工作得很好。
发布于 2019-04-10 07:36:21
-9只是一种表达。所以,只需这样做:
expression
: SUBOPER expression
| expression ADDOPER expression
| expression SUBOPER expression
| NUMBER
;
并从您的-
中删除NUMBER
NUMBER
: [1-9] [0-9]* ( '.'DIGIT+ )?
| '0'? '.' DIGIT+
| '0'
;
https://stackoverflow.com/questions/55606311
复制相似问题