gpt4 book ai didi

computer-science - 关于编译器符号表的简单问题

转载 作者:行者123 更新时间:2023-12-03 01:39:39 26 4
gpt4 key购买 nike

我正在开发一种小型的基于对象的编程语言。

不过,我对一件简单的事情有点迷失了。我已经实现了几个访问者,它们收集 AST 中类的名称、类型和参数、方法头和字段。

我的问题是现在如何处理我的方法主体。我应该将局部变量添加到符号表中吗?

一开始这看起来像是一个好主意,直​​到人们想到这样的情况:

void myMethod() {
int i;

while (something) {
int y;
}

while (something) {
int y;
}
}

如果我只是将 iy 变量添加到符号表中,我会发现 y 是一个重复的变量.

请记住,我了解符号表范围。我无法理解的是,是否应该在方法内部动态添加和删除符号表上的信息,或者是否应该在访问方法时将数据永久添加到符号表中(就像我对类+字段+所做的那样)方法头)。

重申一下问题:访问方法体时,是否应该让符号表在访问结束时与访问前保持一致?

谢谢!

最佳答案

您有一个表示程序结构的 AST。 AST 中的某些节点代表新的范围(方法入口、 block 体……)。

您可以构建一个与 AST 形状相同的符号表:无论您在哪里有表示范围介绍的 AST 节点,都可以构建从符号到其声明的关联映射。

您必须按照语言语义确定的顺序搜索范围,但至少您会知道在哪里查找每个范围。

关于computer-science - 关于编译器符号表的简单问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5861560/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com