首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ANTLR:如何制定重写规则,将词条设置为AST节点文本

ANTLR:如何制定重写规则,将词条设置为AST节点文本
EN

Stack Overflow用户
提问于 2016-02-17 08:52:07
回答 1查看 75关注 0票数 1

下面的语法规则旨在识别文法中的表达式,如"a-b“,该文法生成AST以计算线性方程:

代码语言:javascript
运行
复制
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节点标签设置为"+“而不是”加号“。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2016-02-18 16:19:05

文本'+‘只是由词法分析器转换为标记的输入(在这种情况下,标记类型为PLUS)。您不能重写它,因为lexer总是会将您的输入转换为令牌(因为解析器只处理令牌)。

但是,每个令牌都在内部存储了从中创建的文本。因此,当您遍历树时,可以随时通过在CommonToken或BaseTree类上调用getText()来获取每个标记的原始文本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35445946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档