antlr арифметическое выражение того же типа - PullRequest
1 голос
/ 08 марта 2019

Попытка написать грамматику 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 - переменная, которая не является целым числом)

1 Ответ

1 голос
/ 11 марта 2019

Это называется Семантический анализ .

Когда анализ завершен, вы должны пройти через сгенерированный AST и проверить правильность каждого выражения и переменной.

...