原谅我的英语。我最近试图理解编译器的不同部分并用一种游戏语言来实现它们。我想知道语义分析器的工作是什么,因为我读到的许多语义分析器应该做的事情并不是真正用于动态语言,例如类型检查、范围检查等,因为这些事情是在运行时检查的时间。
所以我认为动态语言(如 LUA 或 PYTHON 或 RUBY)的语义分析器的一些工作是
但是,我不确定动态语言编译器的语义分析阶段还有哪些其他工作。似乎它在动态语言中要做的工作很少,因为大部分工作是在运行时完成的。语义分析器还为动态语言处理哪些其他常见工作?我觉得我错过了语义分析的大部分内容。谢谢你。
最佳答案
您说得对,动态语言编译器中不存在许多分析任务(这就是它们实现起来相对简单的原因)。但是,我还能想到更多的任务:
local
关键字 - 但它仍然需要编译器意识到它! - 并且需要在 Python 中进行相对广泛的分析,赋值隐式地使变量成为局部变量和两个(在 3.x 中,在 2.x 中一个)关键字来改变这种行为。 nil
和 local
不会改变先前赋值的范围,但后续读/写的语义仍然改变。此外,两种情况下的字节码指令也大不相同。 CALL_LIKELY_BUILTIN
操作码,它是为调用全局变量而发出的,根据它们的名字,可能是内置函数。很明显,这需要一些范围分析。 关于compiler-construction - 动态语言中语义分析器的工作是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7185225/