语法定向翻译和语义分析

时间:2014-04-03 08:19:49

标签: parsing compiler-construction compiler-theory

我很难理解语法定向翻译(SDT)和语义分析之间的确切差异。

通过阅读龙书,我知道SDT就像是CFG的延伸。您可以向解析期间可以评估的CFG添加规则或操作,并创建抽象语法树。 (或者将具体语法树转换为AST)

但是,我不明白在这部分之后语义分析的目的是什么。因为在我看来,使用SDT,您将进行语义分析。如果SDT实现规则/操作,SDT也不会进行某些类型检查吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

语法定向翻译(SDT)意味着所有翻译过程都由您的语言解析器驱动。很多时候,这是在没有构建代码的显式树的情况下完成的。解析器检测指令,几乎直接生成目标输出。

另一方面,语义分析(SA)是一个独立的概念。这是编译器的主要阶段之一。它负责检测诸如未定义的变量/函数,访问范围等内容。

SDT和SA可以相关。如果编译器使用SDT,它必须调整SA阶段以在解析器级别执行这些验证。