我创建了一个类似于Visual Basic的解释器,现在添加了一些变量范围。 我的信息来源是The Definitive Antlr Reference的CH8及其附带的代码。 本质上,这些示例使用了Listeners,我的代码使用了Visitors。
如果有人能澄清或纠正我对事情的理解,我将不胜感激:
就范围而言,我应该使用Listener模型(根据Cymbol的例子)首先通过覆盖与我需要的函数和块相关的相应输入/退出函数来创建范围/变量信息。捕捉范围变化。其次,创建了范围后,我是否可以访问树来运行该程序?例如我有VisitEnterFunction和VisitExitFunction,然后我应该推送和弹出范围。
提前感谢您帮助我建立正确的方法。 凯文
答案 0 :(得分:2)
实现嵌套作用域的方法不止一种。要解析稍后在源中定义的符号,必须采用两遍方法。第一遍可以构建一个符号树,后者在运行时在当前作用域堆栈中使用。 第二个选项是将范围作为注释附加到语法树本身。 我再也不能推荐这本书语言实现模式足够高,可以解决你遇到的问题 - 这些东西都包含在内。