1. 需求分析
能分析以下几类语句,并建立符号表及生成中间代码(三地址指令和 四元式形式):
- 声明语句(包括变量声明、数组声明、记录声明和过程声明)
- 表达式及赋值语句(包括数组元素的引用和赋值)
- 分支语句:if_then_else
- 循环语句:do_while
- 过程调用语句
能够识别出测试用例中的语义错误,包括
- 变量(包括数组、指针、结构体)或过程未经声明就使用
- 变量(包括数组、指针、结构体)或过程名重复声明
- 运算分量类型不匹配(也包括赋值号两边的表达式类型不匹配)
- 操作符与操作数之间的类型不匹配
- 赋值号左边出现一个只有右值的表达式
- 数组下标不是整数
- 对非数组变量使用数组访问操作符
- 对非结构体类型变量使用“.”操作符
- 对非过程名使用过程调用操作符
- 过程调用的参数类型或数目不匹配
- 函数返回类型有误
能准确给出错误所在位置。输出的错误提示信息格式如下: Semantic error at Line [行号]:[说明文字]
2. 文法设计
要求:给出如下语言成分所对应的语义动作
- 声明语句(包括变量声明、数组声明、记录声明和过程声明)
- 表达式及赋值语句(包括数组元素的引用和赋值)
- 分支语句:if_then_else
- 循环语句:do_while
- 过程调用语句
3. 系统设计
要求:分为系统概要设计和系统详细设计。
- 系统概要设计:给出必要的系统宏观层面设计图,如系统框架图、数据流图、功能模块结构图等以及相应的文字说明。
- 系统详细设计:对如下工作进行展开描述
核心数据结构的设计
该结构为语法分析树的节点,用于存放单词的内容、属性、深度和子节点信息。
支持返回所有类中的所有实例。在返回属性信息时,如果该节点不具备该属性,会进行报错。
子节点信息和属性信息可以进行增加。
该结构为四元组,用于存放四元组内容。
同时对四元组的分析操作也包含在内
4. 系统实现及结果分析
要求:对如下内容展开描述。
- 系统实现过程中遇到的问题;
该系统没有办法处理未经声明就使用的变量。因为在存储变量的属性时,使用了字典,在调用变量时,如果该变量未经声明,那么符号表中就没有它,也就没有关于它的字典的 key,那么程序会进行 keyerror 报错。
- 针对一测试程序输出其语义分析结果;
测试样例如下:
struct student {
int age;
}
int sum(int x, int y) {
int ret;
ret = x + y;
return ret;
}
int main() {
float a;
a = 1.567;
int b;
int[5][5] c;
c[1][1] = 10;
b = c[1][1];
int d;
int *e;
d = sum(b, c[1][1]);
if(d > 10) {
a = 1.0;
} else {
a = 2.0;
}
while(b < 10) {
d = d + 1;
b = b + 1;
}
return 0;
}