【发布时间】:2020-11-13 11:33:48
【问题描述】:
我是 ANTLR 新手并使用 ANTLR4(4.7.2 Jar 文件)。我目前正在研究 Oracle Parser。
有没有办法从 Parser 或 Lexer 直接向 AST 添加节点(带有一些文本)? 我将 cmets 隐藏在我的 Lexer 中,并希望将其直接添加到树中。
有可能吗?我相信 Less4j 允许类似的东西。
【问题讨论】:
-
正如 Bart 下面提到的,没有什么可以直接在 Antlr4 运行时中使用隐藏的通道标记来装饰解析树。他是对的。但是您可以使用运行时提供的原语(请参阅
ParserRuleContext和TerminalNodeImpl)进行后解析,以免在语法中使用特定于目标的代码。 -
@kaby76 感谢您的回复。有什么我可以参考的吗?如前所述,我是新手,在执行上述操作时需要一些帮助
-
跟随link 到一些你想要的代码。它在 C# 中,因此您必须进行相应的翻译和更改,例如,将递归实现转换为堆栈实现,将流更改为您使用的类型等。但是,它应该可以帮助您入门。
-
@kaby76 :你能告诉我“树是 ParserRuleContext internal_node”是做什么的(在 Program.cs 中提到)吗?什么是 internal_node?我如何将它翻译成java?谢谢。
-
@kaby76 非常感谢。我终于能够根据您提供的样本将 cmets 添加到 ast。