在编译器中实现符号表的替代方法是什么?

2024-04-28 22:26:21 发布

您现在位置:Python中文网/ 问答频道 /正文

这学期我正在为我的一门课写一个编译器,虽然我有一个符号表的工作实现,但我对它的实现有点不舒服。 因为我用Python做这个项目,所以我决定采用OO方法,并且我的AST节点都有一个accept方法来实现访问者模式。对于所有类型的节点,我都有preVisitpostVisit方法,我使用它们来进入/退出新的作用域并向表添加新的绑定。它可以工作,但是我感到不安的是,我的符号表是“昙花一现”的,并且绑定到这个访问者类中。我通过子类化symbol table visitor类来实现类型检查,我需要非常小心地调用super类,以便将它们准确地放在正确的位置。这个实现的脆弱性以及编译器的任何阶段都需要与visitor类紧密耦合这一事实让我有些不安。

我想知道人们通常用什么方式实现符号表?由于该信息是纯静态的,是否可以直接添加到AST节点中?有没有一种方法可以创建一个表,并且可以在正确的上下文中查找符号?另外,纯函数式程序员如何解决这个问题?


Tags: 项目方法类型节点编译器模式astoo