Math antlr同类型算术表达式
尝试编写一个antlr语法,该语法只解析同一类型变量的算术表达式。若它和left或right-side不是同一类型,那个么它就不应该被解析。这就是我所拥有的Math antlr同类型算术表达式,math,types,expression,antlr,Math,Types,Expression,Antlr,尝试编写一个antlr语法,该语法只解析同一类型变量的算术表达式。若它和left或right-side不是同一类型,那个么它就不应该被解析。这就是我所拥有的 stat : Left = VARIABLE Op = ASSIGMENT Right = expr # Assigment ; expr : '(' Exp = expr ')' # Parens | MINUS Exp = e
stat
: Left = VARIABLE Op = ASSIGMENT Right = expr # Assigment
;
expr
: '(' Exp = expr ')' # Parens
| MINUS Exp = expr # UnaryMinus
| Left = expr Op = (TIMES | DIV) Right = expr # MulDiv
| Left = expr Op = (PLUS | MINUS) Right = expr # AddSub
| (VARIABLE | CONSTANT) # Element
;
ASSIGMENT : '=' ;
PLUS : '+' ;
MINUS : '-' ;
TIMES : '*' ;
DIV : '/' ;
LPAREN : '(' ;
RPAREN : ')' ;
我不想要像x=5+'f'或x=c-5这样的东西(如果c是非整数的变量)它被调用
解析完成后,您必须遍历生成的表达式并检查每个表达式和变量的正确性。您不能在语法中强制执行这种约束。您应该在类型检查器中检查这些内容,而不是在解析器中。