gpt4 book ai didi

java - 如何在 Antlr 中使用访问者创建自定义 AST

转载 作者:行者123 更新时间:2023-12-02 10:17:04 25 4
gpt4 key购买 nike

我想使用访问者模式来遍历 ParserRuleContext 并使用预定义节点构建 AST。

在我的语法中,我有以下规则:

expr
: loop
| block

我想生成一个具有以下结构的 AST:

    exprNode
/
loopNode

BaseVisitor Antlr生成的方法如下:

public T visitExpr(MyParser.ExprContext ctx) { return visitChildren(ctx); }

ASTBuilder覆盖此方法并创建 exprNode 。对此exprNode我想附加 loopNodeblockNode通过调用我的覆盖版本 visitLoopvisitBlock 。我遇到的问题是我不知道 expr 的身份,因为我只获得了exprContext来自 parent 。如何检查 expr 的哪个调用使用了规则吗?

最佳答案

不要覆盖visitExpr。只需覆盖 visitLoopvisitBlock 即可。

自动生成的 visitExpr 将调用这两个中适当的一个(通过 visitChildren)并返回任何 visitLoopvisitBlock 返回。因此,只要您重写这些方法以返回正确的结果,visitExpr 也会自动返回正确的结果。

关于java - 如何在 Antlr 中使用访问者创建自定义 AST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54613065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com