【发布时间】:2014-11-07 14:06:11
【问题描述】:
我正在学习 Antlr4 为基本算术编写语言。目前,我已经为基本算术运算符*+-/编写了一个带有Antlr4的语法。
这是我的语法:
grammar Expr; // rename to distinguish from Expr.g4
prog: stat (';' stat)* ;
stat: ID '=' expr (';'|',')? # assign
| expr (';')? # printExpr
;
expr: op=('-'|'+') expr # signed
| expr op=('*'|'/') expr # MulDiv
| expr op=('+'|'-') expr # AddSub
| ID # id
| DOUBLE # Double
| '(' expr ')' # parens
;
MUL : '*' ; // assigns token name to '*' used above in grammar
DIV : '/' ;
ADD : '+' ;
SUB : '-' ;
ID : [a-zA-Z]+ [0-9]* ; // match identifiers
DOUBLE : [0-9]+ ('.' [0-9]+)? ;
WS : [ \t\r\n]+ -> skip ;
问题是由于规则:op=('-'|'+') expr,我的语法接受像 2++++3 这样的输入。但是,我没有找到其他实现签名表达式的方法,例如-2 + 3、x = 6; y = -x、+3 -2。
我该如何修复这个错误?
【问题讨论】:
标签: java math compiler-construction antlr antlr4