下面的语法规则旨在识别文法中的表达式,如"a-b“,该文法生成AST以计算线性方程:
tokens {
PLUS = '+' ;
MINUS = '-' ;
DIV = '/' ;
EQUAL = '=' ;
MULT = '*' ;
}
minusExpr: (a=multExpr -> $a) (MINUS b=multExpr -> ^(PLUS $a ^(MINUS $b)))*; 语法运行正常。我遇到的唯一问题是,在输出AST中,标记的文本被设置为"+“而不是”+“。
例如,对于方程: x-1=11
它生成以下树(语法中还有其他规则,我没有在这里复制):
(= (加x (- 1)) 11)
而不是树:
(= (+ x (- 1)) 11)
我想知道如何重写规则,以便AST节点标签设置为"+“而不是”加号“。谢谢!
发布于 2016-02-18 16:19:05
文本'+‘只是由词法分析器转换为标记的输入(在这种情况下,标记类型为PLUS)。您不能重写它,因为lexer总是会将您的输入转换为令牌(因为解析器只处理令牌)。
但是,每个令牌都在内部存储了从中创建的文本。因此,当您遍历树时,可以随时通过在CommonToken或BaseTree类上调用getText()来获取每个标记的原始文本。
https://stackoverflow.com/questions/35445946
复制相似问题