收藏 分享(赏)

1113710304-张玉-编译原理实验报告-语义分析.docx

上传人:weiwoduzun 文档编号:4067452 上传时间:2018-12-06 格式:DOCX 页数:8 大小:141.19KB
下载 相关 举报
1113710304-张玉-编译原理实验报告-语义分析.docx_第1页
第1页 / 共8页
1113710304-张玉-编译原理实验报告-语义分析.docx_第2页
第2页 / 共8页
1113710304-张玉-编译原理实验报告-语义分析.docx_第3页
第3页 / 共8页
1113710304-张玉-编译原理实验报告-语义分析.docx_第4页
第4页 / 共8页
1113710304-张玉-编译原理实验报告-语义分析.docx_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、编译原理课程实验报告实验 3:语义分析姓名 张玉 院系 软件学院 学号 1113710304任课教师 陈鄞 指导教师实验地点 软件学院三楼机房 实验时间 2013 年 11 月 19 日出勤、表现得分实验课表现 操作结果得分 实验报告 得分 实验总 分一、需求分析 得分要求:阐述语义分析系统所要完成的各个功能,并给出如下语言成分所对应的语义动作 变量说明def_stmttype id array.type = type.type; array.name=id.name; array.length = type.length; array.dimension = 0; array.arri =

2、new Set(int) array vars.type = type.type; vars.length = type.length vars ;vars ,id array.type = vars.type; array.name = id.name; array.length = vars.length; array.dimension = 0; array.arri = new Set(int) array vars1.type=vars.type; vars1.length = vars.length vars1vars array int array1.type = array.t

3、ype; array1.name = array.name; array1.length = array.length; array1.dimension = array1.dimension +1; array1.arri = array.arri U int.value array1array new Record(array.type, array.name, array.length, offset, array.arri ); offset += array.lengh 赋值S id := E p := lookup(id.name);gen( p := E.addr)E E1 +

4、E2 E. addr := newtemp;gen(E.addr := E1.addr + E2.addr)E E1 * E2 E.addr := newtemp;gen(E.addr := E1.addr * E2.addr)E E1 E.addr := newtemp;gen(E.addr := uminus E1.addr)E (E1) E.addr := E1.addr E id E.addr := lookup(id.name); 分支S if B then S1 else S2B.true := newlabel();B.false := newlabel();S1.next :=

5、 S.next;S2.next := S.next;S.code :=B.code | label(B.true) | S1.code |gen(goto,S.next) | label(B.false) | S2.code 循环S while B do S1S.begin:= newlabel();B.true := newlabel();B.false := S.next;S1.next := S.begin;S.code:=label(S.begin)|B.code|label(B.true)|S1.code|gen(goto, S.begin)二、概要设计 得分要求:给出系统概要设计,

6、以及必要的系统宏观层面设计图,如系统框架图、数据流图、功能模块结构图等以及相应的文字说明。注意符号表的相关处理以及错误处理。我的语义分析器包括工具栏,代码输入框,标识符表和语义分析结果四个部分。我 的 编 译 器工 具 栏文 件帮 助代 码 输 入 框自 动 生 成 的 行 号文 本 框标 识 符 表语 义 分 析 结 果图 2-1本程序根据之前两个实验的结果进一步进行语义分析,主要是通过在第二个实验句法分析过程中添加语义分析功能完成的。在代码编写之前,我将程序的功能模块分为界面及主控程序,实体类和工具类三大部分。MyCompiler 是整个程序运行的入口,是主控程序;ComplierFram

7、e 完成程序的界面,以及界面里事件的响应;Token 是词法分析中词法单元的实体类;ErrorToken 是错误的词法单元实体类;Symbol 是句法分析中符号的实体类; Production 是产生式的实体类;ErrorProduction 是句法分析中产生错误的时候使用的产生式实体类;Id 是标示符实体类,保存了语义分析后的标识符表;Node 是语法分析树的节点类,帮助完成语法分析树的构造;LL 类使用 LL(1)分析法完成句法分析,同时完成语义分析;MyScanner 完成了词法分析。我 的 编 译 器界 面 以 及 主 控 程 序MyCompilerCompilerFrame实 体 类

8、TokenErrorTokenSymbolProductionErrorProductionIdNode工 具 类LLMyScanner图 2-2三、详细设计及实现 得分要求:对如下工作进行展开描述(1) 核心数据结构的设计本程序使用了两个新的实体类,分别是 Id 和 Node。Id 是标识符,里面也包含了该标识符在本程序中存储的地址和长度等信息。Id 的属性如下:private String name; /名private String type;/基本类型private int offset;/起始地址private int length;/长度public List arr_length

9、;/该数组各维的长度/变量的维度可以根据 arr_length.size()得出Node 是语法生成树的节点,Node 的属性如下:private String name;/节点名private Node father;/父节点public List sons;/子节点public Map attribute;/属性其中 atrribute 的类型是哈希 Map。这是因为各个节点的属性不是统一的,使用哈希表可以方便地创建、使用属性。(2) 主要功能函数说明此次试验的语义分析部分并没有新的功能函数,因为语义分析过程与语法分析同步进行的,代码都是在第二次第二次实验的基础上,在LL(l)文法符号匹配

10、的过程中,插入语义操作代码。所以,只有句法分析函数analysis(List token_list)的功能发生了变化,添加了语义分析的功能,其他函数功能基本与实验二相同。(3) 程序核心部分的程序流程图开 始输 入词 法 分 析读 入 Token尝 试 匹 配是 否 错 误 存 储 错 误 记 录 , 处 理栈 顶 与 Token序 列是否是 否 为 语 义 符 号否存 储 产 生 式 , 处 理栈 顶 与 Token序 列是判 断 动 作 符 号执 行 语 义 动 作是 否 读 到 Token末 尾是打 印 结 果结 束否图 3-1四、实验结果及分析 得分要求:对实验结果进行描述和分析,基本

11、内容包括:(1) 针对一测试程序输出其语义分析结果;(2) 输出针对此测试程序对应的语义错误报告;(3) 输出针对此测试程序经过语义分析后的符号表;(4) 对实验结果进行分析。注:其中的测试样例需先用已编写的词法分析程序进行处理。测试程序:void main () double d;int a23;d = 0;a01 = 2;if (d = 0) a01 = d;else a11 = 0;while (a013) +a01;分析结果以及错误报告:图 4-1标识符表:图 4-2实验结果分析:程序首先识别出 double 型变量 d 和 int 型二维数组 a,得出符号表,并计算出 d 的起始地址

12、为 0,长度为 8;a 的起始地址为 8,长度为 2*3*4=24。在赋值语句中 a01的地址是以 a 为基准四个单位长度的地方,程序正确识别为a4,也识别出 a11为 a16,其他的赋值语句也都正确地转化为三地址码。在第 4 句分支语句中,当 b0 位真时,跳到 6,进入 if 语句块, ;当 b0 为假时,跳到9,进入 else 语句块。在第 11 句之后的循环语句中,当 b1 为真时,跳到 15,进入循环体;当 b1 为假时,跳到 18,循环结束。正常循环一遍之后,会跳到 11,进行循环判断。在第 7 句中,出现了将 double 类型的值赋给 int 型变量的情况,程序也给出了正确的警告。指导教师评语:日期:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 中等教育 > 中学实验

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报