文档介绍:第6章 语义分析
LI Wensheng, SCST, BUPT
知识点:符号表
类型体制
各语法成分的类型检查
语义分析
语义分析的任务和地位
符号表
符号表的建立
类型检查
一个简单类型检查程序的说明
类型检查有关的其他主题
小 结
Wensheng Li BUPT Li Wensheng
2
语义分析的任务和地位
程序设计语言的结构由上下文无关文法来描述
程序结构正确与否与该结构的上下文有关,如:
–变量的作用域问题
–同一作用域内同名变量的重复声明问题
–表达式、赋值语句中的操作数的类型一致性问题
思考:
–设计上下文有关文法来描述语言中上下文有关的结构?
–理论上可行,构造有困难,构造相应的分析程序更困难
Wensheng Li BUPT Li Wensheng 解决办法:
–设计专门的语义动作补充上下文无关文法的分析程序
–利用语法制导翻译技术实现语义分析
3
上下文有关信息的记录与使用
符号表
–记录编译过程中识别出的上下文有关的信息,如:
–变量的类型
–相对地址
信息的引用
–根据词法分析程序识别出的标识符的属性值(标识符在符
号表中的入口),查找符号表中对应该标识符的记录,从
而可以取得该标识符有关的信息。
–如果编译的程序块处于该变量的作用域内,则这个变量将
Wensheng Li BUPT Li Wensheng 一直保留在符号表中
4
语义检查
动态检查:目标程序运行时进行的检查
静态检查:读入源程序、但不执行源程序的情况下
进行的检查
–类型检查
• 对访问数据的操作和被访问数据的类型进行检查,检查操作的合
法性和数据类型的相容性。
–控制流检查
• 检查控制语句是否使控制转移到一个合法的位置。
–唯一性检查
Wensheng Li BUPT Li Wensheng • 一个标识符在同一程序块中必须而且只能被说明一次
• CASE语句中用于匹配选择表达式的常量必须各不相同
• 枚举类型定义中的各元素不允许重复
–关联名字的检查
5
类型检查
由类型检查程序完成
检验结构的类型是否和它的上下文所期望的一致,
如:
–表达式中各运算对象的类型
–算术运算符 mod 的运算对象的类型
–用户定义函数的各参数类型、返回值类型
Wensheng Li BUPT Li Wensheng
6
语义分析程序的作用和地位
语义分析程序的作用
–符号表的建立和管理
–类型检查
语义分析程序的地位
语法 语义 中间代码
记号流 中间代码
分析程序 语法树 分析程序 语法树 生成程序