antlr4 - 听众和访客范围 Antlr4 - 设计问题

标签 antlr4

我已经创建了一个类似于 Visual Basic 的解释器,现在添加了一些变量范围。 我的信息来源是 The Definitive Antlr Reference 的 CH8 及其随附的代码。 本质上,这些示例使用监听器,而我的代码使用访问者。

如果有人能够澄清或纠正我对事物的理解,我将不胜感激:

就作用域而言,我应该使用监听器模型(按照 Cymbol 示例一书)首先遍历树,通过覆盖与我需要的函数和 block 相关的适当输入/退出函数来创建作用域/变量信息捕获范围变化。其次,创建范围后,我是否可以访问树来运行程序?例如在我有 VisitEnterFunction 和 VisitExitFunction 的地方,我应该推送和弹出范围。

预先感谢您帮助我找到执行此操作的正确方法。 凯文

最佳答案

实现嵌套作用域的方法不止一种。为了解析稍后在源代码中定义的符号,必须采用两遍方法。第一遍可以构建一个符号树,稍后在当前作用域堆栈中运行时使用该符号树。 第二个选项是将范围作为注释附加到语法树本身。 再次强调,我无法推荐足够高的语言实现模式一书来解决您遇到的问题 - 那里确实涵盖了这些内容。

关于antlr4 - 听众和访客范围 Antlr4 - 设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20841409/

相关文章:

java - 带数字的antlr4语法字符串

parsing - 在 ANTLR4 中使用什么来解决更复杂情况下的歧义(而不是句法谓词)?

antlr4 - 需要一个 ANTLR4 树行走线索

c++ - 在语法文件上运行 c++ 的 antlr4 解析器显示错误 33 : missing code generation template NonLocalAttrRefHeader

c# - 如何使用 Eclipse 构建 Antlr4 C# 语法?

java - 如何使用ANTLR4进行精确的词解析?

ANTLR4 API 显示任意 ParseTree

java - 如何使用 Gradle 2.10 将 ANTLR 词法分析器语法导入另一个语法?

java - 如何使用 ANTLR 获取 Python 中每个函数的 ast

Java - 从 ANTLR 4 访问者实现生成 JVM 字节码