【发布时间】:2018-02-08 20:55:37
【问题描述】:
我正在尝试使用 Antlr 4 设置一个简单的计算器。
语法:
grammar calcGrammar;
input : expression EOF;
expression :
MINUS expression #unaryMinusExpr
| expression op=(MULTIPLY | DIVIDE) expression #multiplicationExpr
| expression op=(MINUS | ADD) expression #additiveExpr
| NUMBER #num
;
NUMBER : [0-9]+ ;
DOUBLE : NUMBER '.' NUMBER;
LPAR : '(';
RPAR : ')';
ADD : ('+');
MINUS : ('-');
DIVIDE : ('/');
MULTIPLY : ('*');
Java 代码:
public class Listener extends ListenerBaseVisitor {
@Override
public Object visitUnaryMinusExpr(ArithmeticGrammarParser.UnaryMinusExprContext ctx) {
System.out.println(ctx.children.get(0).getText());
}
@Override
public Object visitAdditiveExpr(ArithmeticGrammarParser.AdditiveExprContext ctx) {
System.out.println(ctx.children.get(0).getText());
System.out.println(ctx.children.get(1).getText());
}
如果我的输入是 2 - -2。使用此输入,代码将永远不会进入此方法。请注意,输入有一个负一元运算符,这应该被视为“-2”。当我在方法中放置一个调试点时,永远不会进入。
我的语法设置不应该总是首先考虑一元减号吗?
编辑:似乎在实现一元表达式和上瘾表达式时会出现此错误。在这种情况下,程序将不会使用输入 '2 - -2' 进入一元方法
【问题讨论】: