
语义分析实验报告
班级:
学号:
姓名:

一、目的与要求
1. 目的
通过上机实习,加深对语法制导翻译和运行时存储空间分配的理解,掌握
将语法分析所识别的语法范畴变换为某种中间代码的语义翻译方法。
2. 要求
采用语法制导翻译技术。
可以考虑实现简单的静态语义检查。
语义分析的对象重点考虑经过语法分析后已是正确的语法范畴,程序设
计的重点是语义子程序的设计。
中间代码选用四元式。
以两周内完成为宜。
3. 源语言的语法结构大致可分为以下六类:
声明语句:简单类型、复杂类型及其数据空间特性(如全局数据、局部
数据等),以及过程声明。重点是符号表的操作。
顺序结构:典型代表是两类表达式(算术表达式、布尔表达式)及相应
的赋值语句。重点是算术表达式的翻译方法(各种属性值的计算)。
控制结构:if 语句。重点是跳转的地址问题(拉链返填)。
子程序结构:过程和函数的调用。重点是参数传递和返回地址(活动记
录)。
循环结构:while 语句。重点是循环的优化(本实验暂不涉及)。

格式语句:主要指输入输出语句的格式加工。在 LittleP+中, read(a,b,c)
表示从键盘读入三个无符号整数;write(x, Y+2)表示向屏幕打印两个表
达式的值。
二、设计步骤
1. 问题分析:
如何把语法分析和语义分析结合起来(语义子程序的处理时机);
如何设计语义子程序来产生四元式;
有哪些静态语义检查工作?(应着重考虑实现以下几点:)
i. 标识符必须先说明,再使用;
ii. 同一作用域内不得重复定义(在符号表中记录标识符的作用
域);
iii. 操作数与操作符的类型匹配
a) 定义在 integer 上的运算:+ - * div mod 和关系运算符;
b) 定义在 boolean 上的运算:not or and ;
c) 赋值运算符:=两端的类型应该相同。
iv. 对于不满足上述规则的,应给出错误提示。
2. 总体设计:
对文法进行必要的等价变换,并为每条产生式添加语义子程序。
针对表达式的产生式,自下而上地计算其综合属性。
针对各种语句的产生式,自上而下地计算其继承属性。
评论4