还剩6页未读,继续阅读
文本内容:
编译原理课程实验报告实验语义分析3**B繇软件学院1113710304指导教师®年月日实验时间20221119实验报告出勤、表现得分操实验课表现实验总分得分作结果得分得分
一、需求分析要求阐述语义分析系统所要完成的各个功能,并给出如下语言成份所对应的语义动作变量说明•def5tmt—type id{array.type=type.type;array.name=id.name;array.length=type.length;array.dimension=二0;array.arri=new Setint}array{vars.type=type.type;vars.length typelength}vars;vars—,id{array.type=vars.type;array.name=id.name;array.length=varsJength;array.dimension=0;array.arri=new Setint}array{varsl.type=vars.type;varsllength=vaslength}varslvars Yarray—[int]{arrayl.type=array.type;arrayl.name=array.name;arrayl.length=array.length;arrayldimension=arrayl.dimension+1;arrayl.arri=array.arri Uintvalue}arrayl array—£{new十=Recordarray.type array.name,array.length,offset,array.arri;offset array.lengh}z赋值•S—id:=E{p:=lookupid.name;,genp=E.addr}E—El+E2{E.addr:=newtemp;genE.addr El.addr E
2.addr}E—El*E2{E.addr:=newtemp;二genE.addr El.addr E
2.addrE——El{E.addr:=newtemp;genE.addr=/uminus/El.addr}E—El{E.addr:=El.addrE—id{E.addr:=lookupid.name;}吩支;;S—if Bthen SIelse S2{B.true:=newlabelO B.false:=newlabelO Sl.ne*t:=S.ne*t;S
2.ne*t:=S.ne*t;S.code:=B.code||labelB.true||SLcode||genCgoto\S.ne*t||labelB.false||S
2.code}循环一S whileB doSI{S.begin:=newlabel;B.tnie:=newlabel;B.folse:=S.ne*t;Sl.ne*t:=S.begin;S.code:=labelS.begin||B.code||labelB.true||Sl.code||genCgoto\S.begin、概要设计得分要求给出系统概要设计,以及必要的系统宏观层面设计图,如系统框架图、数据流图、叫能模块构造图等以及相应的文字说明注意符号表的相关处理以及错误处理我的语义分析器包括工具栏,代码输入框,标识符表和语义分析结果四个局部我的编译器代码输入框:文木,■■■■■■■■语义分析结果本程序根据之前两个实验的结果进一步发展语义分析,主要是通过在第二个实验句法分析过程中添加语义分析功能完成的在代码编写之前,我将程序的功能模块分为界面及主控程序,实体类和工具类三大局部是整个程序运行的入口,是主控程序;完成程序的界面,以及界面里事件的响应;Mypiler plierFrameToken是词法分析中词法单元的实体类;是错误的词法单元实体类;是句法分析中符号的实体类;ErrorToken Symbol是产生式的实体类;是句法分析中产生错误的时候使用的产生式实体类;是标示符Production ErrorProductionId实体类,保存了语义分析后的标识符表;是语法分析树的节点类,匡助完成语法分析树的构造;类Node LL使用分析法完成句法分析,同时完成语义分析;完成为了词法分析LL1MyScanner
三、详细设计及实现得分要求对如下工作发展展开描述核心数据构造的设计1本程序使用了两个新的实体类,分别是和Id Node是标识符,里面也包含了该标识符在本程序中存储的地址和长度等信息的属性如下:Id Id名private Stringname;//我的编译器」/根本类型privaleString type改〃起始地址privateintoflfe长度privateintlength;//该数勿各维的长度座量的维度可以根据(居出public ListIntegerarr_Jength;//1aiT_length.size是语法生成树的节点,的属性如下Node Node/琳点名private Stringname;父节点private Nodefiither^/子节点public ListNodesons;//属性puHic MapString,String attribute;//其中的类型是哈希这是因为各个节点的属性不是统一的,使用哈希表可以便地创立、使用属attribute Map性⑵主要功能函数说明此次试验的语义分析局部并没有新的功能函数,因为语义分析过程与语法分析同步发展的,代码都是在第二次第二次实验的根抵上,在文法符号匹配的过程中,插入语义操作代码所以,惟独句法分析函数LL1」的功能发生了变化,添加了语义分析的功能其他函数功能根本与实验二一样analysisListToken tokenist3程序核心局部的程序流程图开始..是Z.图3-1
四、实验结果及分析要求对实验结果发展描述和分析,根本容包括针对一测试程序输出其语义分析结果;1输出针对此测试程序对应的语义错误报告;2输出针对此测试程序经过语义分析后的符号表;3对实验结果发展分析4注其中的测试样例需先用已编写的词法分析程序发展处理测试程序voidmain{doubled;inta
[2]
[3];d=0;a
[0][l]=2;ifd=O{a[O][l]=d;}elsea[l][l]=0;}while a
[0][l]3{-H-a
[0][l];分析结果以及错误报告:语义分析结果0d:二01a
[4]to:=2a
[4]:=23b0:=d=04if bOgoto65got096tl:=a
[4]=da
[4]将类组的值赋给一waning:double8goto119t2:=a
[16]10a
[16]:=011t3;=a
[4]12bl:=13313if bl15ecto14goto1815t4;=a
[4]16t5:=117goto1118end图44标识符表:标识符表类型偏移地址长度d double01Ba mt
[2]
[3]8|24图42实验结果分析程序首先识别出double型变量d和int型二维数组a,得出符号表,并计算出d的起始地址为,长度为8;的起始地址为长度为a8,2*3*4=24在赋值语句中的地址是以为基准四个单位长度的地,程序正确识别为也识别出a a
[4],为其他的赋值语句也都正确地转化为三地址码a
[16],在第句分支语句中,当位真时,跳到进入语句块,;当为假时,跳到进入语句块4bO6,if bO9,else在第句之后的循环语句中,当为真时,跳到进入循环体;当为假时,跳到循环完毕正常11bl15,bl18,循环一遍之后,会跳到发展循环判断11,在第句中,浮现了将类型的值赋给型变量的情况,程序也给出了正确的警告7double int指导教师评语:日期:。
个人认证
优秀文档
获得点赞 0