这学期我正在为我的一门课写一个编译器,虽然我有一个符号表的工作实现,但我对它的实现有点不舒服。
因为我用Python做这个项目,所以我决定采用OO方法,并且我的AST节点都有一个accept
方法来实现访问者模式。对于所有类型的节点,我都有preVisit
和postVisit
方法,我使用它们来进入/退出新的作用域并向表添加新的绑定。它可以工作,但是我感到不安的是,我的符号表是“昙花一现”的,并且绑定到这个访问者类中。我通过子类化symbol table visitor类来实现类型检查,我需要非常小心地调用super类,以便将它们准确地放在正确的位置。这个实现的脆弱性以及编译器的任何阶段都需要与visitor类紧密耦合这一事实让我有些不安。
我想知道人们通常用什么方式实现符号表?由于该信息是纯静态的,是否可以直接添加到AST节点中?有没有一种方法可以创建一个表,并且可以在正确的上下文中查找符号?另外,纯函数式程序员如何解决这个问题?
目前没有回答
相关问题 更多 >
编程相关推荐