以下语法规则旨在识别生成AST以评估线性方程式的语法中的“a-b”表达式:
tokens {
PLUS = '+' ;
MINUS = '-' ;
DIV = '/' ;
EQUAL = '=' ;
MULT = '*' ;
}
minusExpr: (a=multExpr -> $a) (MINUS b=multExpr -> ^(PLUS $a ^(MINUS $b)))*;
语法正常。我唯一的问题是在输出AST中,令牌的文本设置为“PLUS”而不是“+”。
例如,对于等式:x-1 = 11
它生成以下树(语法有其他规则,我没有在这里复制):
(=(PLUS x( - 1))11)
而不是树:
(=(+ x( - 1))11)
我想知道如何重写规则,以便AST节点标签设置为“+”而不是“PLUS”。谢谢!
答案 0 :(得分:0)
文本“+”只是词法分析器转换为标记的输入(在这种情况下,标记类型为PLUS)。你无法重写,因为词法分析器总是将你的输入转换为标记(因为解析器只能使用标记)。
但是,每个令牌都有从内部存储创建的文本。因此,当您走树时,您可以通过在CommonToken或BaseTree类上调用getText()来随时获取每个令牌的原始文本。