1
기본 arithmetics에 대한 언어를 작성하려면 Antlr4
을 배우고 있습니다. 현재 기본 산술 연산자 *
+
-
/
에 대해 Antlr4
이라는 문법을 작성했습니다. op=('-'|'+') expr
:기본 산술 및 부호 식을 사용하는 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 ;
문제는 내 문법으로 인해 규칙에 2++++3
같은 입력을 수용한다는 것입니다 : 여기 내 문법이다. 그러나 -2 + 3
, x = 6; y = -x
, +3 -2
과 같이 서명 된 표현식을 구현하는 다른 방법을 찾지 못했습니다.
어떻게 버그를 해결할 수 있습니까?