Попытка написать грамматику antlr, которая анализирует арифметическое выражение только для одной и той же типизированной переменной.Если это не тот же тип, что и левая или правая сторона, его не следует анализировать.Это то, что у меня есть;
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 - переменная, которая не является целым числом)