1. 需求分析
能分析以下几类语句,并建立符号表及生成中间代码(三地址指令和 四元式形式): - 声明语句(包括变量声明、数组声明、记录声明和过程声明) - 表达式及赋值语句(包括数组元素的引用和赋值) - 分支语句:if_then_else - 循环语句:do_while - 过程调用语句
能够识别出测试用例中的语义错误,包括 - 变量(包括数组、指针、结构体)或过程未经声明就使用 - 变量(包括数组、指针、结构体)或过程名重复声明 - 运算分量类型不匹配(也包括赋值号两边的表达式类型不匹配) - 操作符与操作数之间的类型不匹配 - 赋值号左边出现一个只有右值的表达式 - 数组下标不是整数 - 对非数组变量使用数组访问操作符 - 对非结构体类型变量使用“.”操作符 - 对非过程名使用过程调用操作符 - 过程调用的参数类型或数目不匹配 - 函数返回类型有误
能准确给出错误所在位置。输出的错误提示信息格式如下: Semantic error at Line [行号]:[说明文字]
2. 文法设计
要求:给出如下语言成分所对应的语义动作
- 声明语句(包括变量声明、数组声明、记录声明和过程声明)
- 表达式及赋值语句(包括数组元素的引用和赋值)
- 分支语句:if_then_else
- 循环语句:do_while
- 过程调用语句
3. 系统设计
要求:分为系统概要设计和系统详细设计。
- 系统概要设计:给出必要的系统宏观层面设计图,如系统框架图、数据流图、功能模块结构图等以及相应的文字说明。
- 系统详细设计:对如下工作进行展开描述
核心数据结构的设计
该结构为语法分析树的节点,用于存放单词的内容、属性、深度和子节点信息。
支持返回所有类中的所有实例。在返回属性信息时,如果该节点不具备该属性,会进行报错。
子节点信息和属性信息可以进行增加。
该结构为四元组,用于存放四元组内容。
同时对四元组的分析操作也包含在内
- 主要功能函数说明
该函数用于读取语法分析后形成的语法树,并形成新的语法分析树。
该函数用于将符号信息加入到符号表中。
加入到内容包括符号本身、符号表的类型、符号表的偏置
该函数用于计算数据类型对应的字符长度,用于辅助计算偏置长度
该函数用于计算偏置。
该函数用于生成临时变量
该函数为语义分析主体内容。函数根据生成的语法分析树来生成符号表与四元式
- 程序核心部分的程序流程图
4. 系统实现及结果分析
要求:对如下内容展开描述。
- 系统实现过程中遇到的问题;
该系统没有办法处理未经声明就使用的变量。因为在存储变量的属性时,使用了字典,在调用变量时,如果该变量未经声明,那么符号表中就没有它,也就没有关于它的字典的 key,那么程序会进行 keyerror 报错。
- 针对一测试程序输出其语义分析结果;
测试样例如下:
```c++ 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;
} ```
语义分析结果如下:
c++
L0: (+, 0, 4, t1) t1 = 0 + 4
L1: (=, t1, -, 8) 8 = t1
L2: (=, 8, -, ret) ret = 8
L3: (pop, -, -, t2) pop t2
L4: (j, -, -, t2) goto t2
L5: (=, $1.567, -, t3) t3 = $1.567
L6: (=, t3, -, 12) 12 = t3
L7: (=, $1, -, t4) t4 = $1
L8: (=, $1, -, t5) t5 = $1
L9: (=, $10, -, t6) t6 = $10
L10: (=, t6, -, 44) 44 = t6
L11: (=, $1, -, t7) t7 = $1
L12: (=, $1, -, t8) t8 = $1
L13: (=, 44, -, 16) 16 = 44
L14: (=, $1, -, t9) t9 = $1
L15: (=, $1, -, t10) t10 = $1
L16: (=, 44, -, x) x = 44
L17: (=, 16, -, y) y = 16
L18: (push, L20, -, -) push L20
L19: (j, -, -, L0) goto L0
L20: (=, ret, -, t11) t11 = ret
L21: (=, t11, -, 120) 120 = t11
L22: (=, $10, -, t12) t12 = $10
L23: (j>, 120, t12, 25) if 120>t12 goto L25
L24: (j, -, -, 28) goto L28
L25: (=, $1.0, -, t13) t13 = $1.0
L26: (=, t13, -, 12) 12 = t13
L27: (j, -, -, 30) goto L30
L28: (=, $2.0, -, t14) t14 = $2.0
L29: (=, t14, -, 12) 12 = t14
L30: (=, $10, -, t15) t15 = $10
L31: (j<, 16, t15, 33) if 16<t15 goto L33
L32: (j, -, -, 40) goto L40
L33: (=, $1, -, t16) t16 = $1
L34: (+, 120, t16, t17) t17 = 120 + t16
L35: (=, t17, -, 120) 120 = t17
L36: (=, $1, -, t18) t18 = $1
L37: (+, 16, t18, t19) t19 = 16 + t18
L38: (=, t19, -, 16) 16 = t19
L39: (j, -, -, 30) goto L30
L40: (=, $0, -, t20) t20 = $0
L41: (=, t20, -, ret) ret = t20
L42: (pop, -, -, t21) pop t21
L43: (j, -, -, t21) goto t21
- 输出针对此测试程序经过语义分析后的符号表;
c++
int 0
y int 4
ret int 8
a float 12
b int 16
c int 20
d int 120
e int* 124
三列内容分别为变量名、变量的数据类型、变量的偏置
- 输出针对此测试程序对应的语义错误报告;
重复声明:
数据类型不匹配:
数组下表非整数:
- 对实验结果进行分析。
实验结果均正确无误。
参考文献
- 文本分析资源与任务管理系统的设计与实现(北京交通大学·宋奕文)
- 网络新闻语料库建设及其分布式检索系统研究(华中师范大学·鲁松)
- 基于web的数据可视化方法研究与实现(西安电子科技大学·曹东升)
- 基于文本情感分析的个性化推荐系统的研究(武汉邮电科学研究院·刘师培)
- 文本分析资源与任务管理系统的设计与实现(北京交通大学·宋奕文)
- 基于Spring Cloud的分布式语义分析挖掘平台中管理子系统的设计与实现(北京邮电大学·任聚才)
- 基于数据挖掘的用户语义智能分析系统设计与开发(湖南大学·彭盛兰)
- 基于联合学习的知识库问答研究(内蒙古科技大学·张晨荣)
- 文本分析资源与任务管理系统的设计与实现(北京交通大学·宋奕文)
- 面向特定领域评论文本的情感分析(兰州交通大学·秦晓雅)
- 基于Spring Cloud的分布式语义分析挖掘平台中管理子系统的设计与实现(北京邮电大学·任聚才)
- 基于云计算的用户网络行为挖掘分析系统的研究与设计(湖北大学·皮健夫)
- 电子商务环境下用户观点的情感挖掘研究(四川师范大学·陈苹)
- 基于知识图谱的问句语义理解技术研究与实现(国防科技大学·韩晗)
- 分布式主题网络爬虫研究与设计(电子科技大学·单文远)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:代码工厂 ,原文地址:https://m.bishedaima.com/yuanma/36157.html