我目前正在为具有全局变量和嵌套子例程功能的语言构建编译器。以前,我只为只有局部变量而没有嵌套子例程的语言构建了一个编译器。
我有一个关于如何在代码生成阶段重用语义分析阶段填充的符号表的问题。我将符号表作为一个链表堆栈,其中每个链表代表在特定范围内声明的标识符。每次进入范围时,都会创建一个新列表并将其推送到堆栈并成为当前范围。同样,每次离开作用域时,堆栈顶部的列表都会弹出。最后,语义分析完成后,我实际上有一个空的符号表,就像它开始时一样。但是,代码生成器需要一个完全填充的符号表才能正确生成代码。如何在不重新执行语义分析期间完成的操作(即,将标识符输入符号表)的情况下做到这一点?