Math antlr同类型算术表达式

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

尝试编写一个antlr语法,该语法只解析同一类型变量的算术表达式。若它和left或right-side不是同一类型,那个么它就不应该被解析。这就是我所拥有的

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是非整数的变量)

它被调用


解析完成后,您必须遍历生成的表达式并检查每个表达式和变量的正确性。

您不能在语法中强制执行这种约束。您应该在类型检查器中检查这些内容,而不是在解析器中。