欢迎来到天天文库
浏览记录
ID:18835790
大小:133.28 KB
页数:9页
时间:2018-09-26
《_张玉_编译原理实验报告-语义分析要点》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、编译原理课程实验报告实验3:语义分析姓名张玉院系软件学院学号1113710304任课教师陈鄞指导教师实验地点软件学院三楼机房实验时间2013年11月19日实验课表现出勤、表现得分实验报告得分实验总分操作结果得分一、需求分析得分要求:阐述语义分析系统所要完成的各个功能,并给出如下语言成分所对应的语义动作·变量说明def_stmt→typeid{array.type=type.type;array.name=id.name;array.length=type.length;array.dimension=0;array.a
2、rri=newSet(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=newSet(int)}array{vars1.type=vars.type;vars1.length=vars.length}vars1vars→ξarray→[int]{a
3、rray1.type=array.type;array1.name=array.name;array1.length=array.length;array1.dimension=array1.dimension+1;array1.arri=array.arriUint.value}array1array→ξ{newRecord(array.type,array.name,array.length,offset,array.arri);offset+=array.lengh}·赋值S→id:=E{p:=lookup(id
4、.name);gen(p‘:=’E.addr)}E→E1+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→ifBthenS1else
5、S2{B.true:=newlabel();B.false:=newlabel();S1.next:=S.next;S2.next:=S.next;S.code:=B.code
6、
7、label(B.true)
8、
9、S1.code
10、
11、gen(‘goto’,S.next)
12、
13、label(B.false)
14、
15、S2.code}·循环S→whileBdoS1{S.begin:=newlabel();B.true:=newlabel();B.false:=S.next;S1.next:=S.begin;S.code:=label(S.
16、begin)
17、
18、B.code
19、
20、label(B.true)
21、
22、S1.code
23、
24、gen(‘goto’,S.begin)}二、概要设计得分要求:给出系统概要设计,以及必要的系统宏观层面设计图,如系统框架图、数据流图、功能模块结构图等以及相应的文字说明。注意符号表的相关处理以及错误处理。我的语义分析器包括工具栏,代码输入框,标识符表和语义分析结果四个部分。图2-1本程序根据之前两个实验的结果进一步进行语义分析,主要是通过在第二个实验句法分析过程中添加语义分析功能完成的。在代码编写之前,我将程序的功能模块分为界面及主控程序,
25、实体类和工具类三大部分。MyCompiler是整个程序运行的入口,是主控程序;ComplierFrame完成程序的界面,以及界面里事件的响应;Token是词法分析中词法单元的实体类;ErrorToken是错误的词法单元实体类;Symbol是句法分析中符号的实体类;Production是产生式的实体类;ErrorProduction是句法分析中产生错误的时候使用的产生式实体类;Id是标示符实体类,保存了语义分析后的标识符表;Node是语法分析树的节点类,帮助完成语法分析树的构造;LL类使用LL(1)分析法完成句法分析,同
26、时完成语义分析;MyScanner完成了词法分析。图2-2三、详细设计及实现得分要求:对如下工作进行展开描述(1)核心数据结构的设计本程序使用了两个新的实体类,分别是Id和Node。Id是标识符,里面也包含了该标识符在本程序中存储的地址和长度等信息。Id的属性如下:privateStringname;//名privateStrin
此文档下载收益归作者所有