![编译方法、技术与实践](https://wfqqreader-1252317822.image.myqcloud.com/cover/849/51730849/b_51730849.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.2.3 语义分析
语义分析器将语法分析树与词法分析中构造的符号表相关联,检查源程序是否满足语言所定义的语义规则。语义分析器同时提取变量的类型信息,以便于中间代码的生成。语义分析器输出修饰语法树,给语法树赋予了语义信息。
例如,对于语法分析树:
![](https://epubservercos.yuewen.com/A141C7/30532542904512906/epubprivate/OEBPS/Images/19_03.jpg?sign=1738868552-EPquzrC4OsvTUks7edApknuWxBSfysaB-0-d7b28ede485ca99ef51d8c778d290756)
![](https://epubservercos.yuewen.com/A141C7/30532542904512906/epubprivate/OEBPS/Images/20_01.jpg?sign=1738868552-1EwwdmBTwNY0SOBAZin65XYoMayKcnid-0-6322d01b6068987d8994d2567134398b)
语义分析器分析等号右端表达式的类型是否与被赋值的变量i一致。当i、b、c均为INT类型时符合语义规则。
语义分析的一个重要工作是做类型检查,语义分析器检查构成表达式的每个运算分量是否具有符合语义规则的类型,如下标应为整数,等号两侧的值类型应当相同等。
在第3章中,我们将讨论以下内容:
●属性文法,属性文法是一种形式化方法,通过在语法分析树上添加属性,并基于添加的属性进行计算和推导,若推导结果有矛盾则存在语义错误。
●语法制导的定义,语法制导的定义将属性文法和翻译方案结合起来,并能够快速反馈到源代码层面,有助于快速修复源代码中的错误。
●实现属性文法和语法制导的算法。