- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1113710304-张玉-编译原理实验报告-语义分析
编译原理课程实验报告
实验3:语义分析
姓名
张玉
院系
软件学院
学号
1113710304
任课教师
陈鄞
指导教师
实验地点
软件学院三楼机房
实验时间
2013年11月19日
实验课表现
出勤、表现得分
实验报告
得分
实验总分
操作结果得分
一、需求分析
得分
要求:阐述语义分析系统所要完成的各个功能,并给出如下语言成分所对应的语义动作
? 变量说明
def_stmt→type id { array.type = type.type; array.name=id.name; array.length = type.length; array.dimension = 0; array.arri = 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 } vars1
vars → ξ
array → [ int ] { array1.type = array.type; array1.name = array.name; array1.length = array.length; array1.dimension = array1.dimension +1; array1.arri = array.arri U int.value} array1
array → ξ{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 + 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 S2
{B.true := newlabel();
B.false := newlabel();
S1.next := 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 S1
{S.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)
}
二、概要设计
得分
要求:给出系统概要设计,以及必要的系统宏观层面设计图,如系统框架图、数据流图、功能模块结构图等以及相应的文字说明。注意符号表的相关处理以及错误处理。
我的语义分析器包括工具栏,代码输入框,标识符表和语义分析结果四个部分。
图2-1
本程序根据之前两个实验的结果进一步进行语义分析,主要是通过在第二个实验句法分析过程中添加语义分析功能完成的。
在代码编写之前,我将程序的功能模块分为界面及主控程序,实体类和工具类三大部分。
MyCompiler是整个程序运行的入口,是主控程序;ComplierFrame完成程序的界面,以及界面里事件的响应;Token是词法分析中词法单元的实体类;ErrorToken是错误的词法单元实体类;Symbol是句法分析中符号的实体类;Production是产生式的实体类;ErrorProduction是句
- 软件下载与安装、电脑疑难问题解决、office软件处理 + 关注
-
实名认证服务提供商
专注于电脑软件的下载与安装,各种疑难问题的解决,office办公软件的咨询,文档格式转换,音视频下载等等,欢迎各位咨询!
文档评论(0)