编译原理实验指导(5)
八、思考题
1、 语法制导翻译的工作方式?
2、 为什么编译程序要设计生成中间代码方式?
16
实验7 语法制导的三地址代码生成
一、实验目的
掌握计算机语言的语法分析程序设计与属性文法应用的实现方法。
二、实验内容
编制一个能够进行语法分析并生成三地址代码的微型编译程序。
三、实验要求
1、考虑下述语法制导定义中文法,采用递归子程序法,改写文法,构造语法分析程序; 2、考虑下述语法制导定义中语义规则,改写语法分析程序,构造三地址代码生成程序。 产生式 S->id = E ; S->if C then S C.true = newlabel; C.false = S.next; S1.next = S.next; S.code = C.code || gen(E.true’:’) || S1.code S->while C do S S.begin = newlabel; C.true = newlabel; C.false = S.next; S1.next = S.begin; S.code = gen(S.begin’:’) || C.code || gen(E.true’:’) || S1.code || gen(‘goto’S.begin); C->E1 > E2 C.code = E1.code || E2.code || gen(‘if’E1.place’>’E2.place’goto’C.true) || gen(‘goto’C.false) C->E1 < E2 C.code = E1.code || E2.code || gen(‘if’E1.place’<’E2.place’goto’C.true) || gen(‘goto’C.false) C->E1 = E2 C.code = E1.code || E2.code || gen(‘if’E1.place’=’E2.place’goto’C.true) || gen(‘goto’C.false) E->E1 + T E.place = newtemp; E.code = E1.code||T.code|| gen(E.place’:=’E1.place’+’T.place) E->E1 - T E.place = newtemp; E.code = E1.code || T.code || gen(E.place’:=’E1.place’-’T.place) 语义规则 S.code = E.code || gen(id.place’:=’E.place) 17
T->T1 * F T.place = newtemp; T.code = T1.code || F.code || gen(T.place’:=’T1.place’*’F.place) T->T1 / F T.place = newtemp; T.code = T1.code || F.code || gen(T.place’:=’T1.place’/’F.place) F->( E ) F->id F->int8 F->int10 F->int16 F.place = E.place; F.code = E.code F.place = id.name; F.code = ‘ ‘ F.place = int8.value; F.code = ‘ ‘ F.place = int10.value; F.code = ‘ ‘ F.place = int16.value; F.code = ‘ ‘ 四、实验环境
PC微机
DOS操作系统或 Windows 操作系统
Turbo C 程序集成环境或 Visual C++ 程序集成环境
五、实验步骤
1、考虑给定的文法,消除左递归,提取左因子。 2、编制并化简语法图 3、编制递归子程序的算法 4、编制各个递归子程序函数
5、连接实验一的词法分析函数scan( ),进行测试 6、设计三地址代码生成的数据结构和算法 7、将各个递归子程序函数改写为代码生成函数 8、编制测试程序(main函数)
9、调试程序:输入一个语句,检查输出的三地址代码
六、测试数据
输入数据例:while (a3+15)>0xa do if x2 = 07 then while y 正确结果:等效的三地址代码序列 L1: t1 := a3 + 15 L2: L3: if t1 > 10 goto L2 goto L0 if x2 > 7 goto L4 goto L1 18 L4: if y < z goto L5 goto L1 L5: t2 = x * y t3 = t2 / z y = t3 goto L3 goto L1 L0: // S.next 七、实验报告要求 实验报告应包括以下几个部分: 1、语法制导定义 2、改写后的产生式集合 3、化简后的语法图 4、 递归子程序的算法 5、三地址代码生成器的数据结构 6、程序结构的说明 八、思考题 1、生成的三地址代码可否直接输出(不采用数据结构来实现属性code)?2、如何保证四则运算的优先关系和左结合性? 3、如何采用代码段相对地址代替三地址代码序列中的标号? 19 20
相关推荐:
- [高等教育]公司协助某村精准扶贫工作总结.doc
- [高等教育]高二生物知识点总结(全)
- [高等教育]苏教版数学三年级下册《解决问题的策略
- [高等教育]仪器分析课程学习心得
- [高等教育]2017年五邑大学数学与计算科学学院333
- [高等教育]人教版七年级下册语文第四单元测试题(
- [高等教育]2018年秋七年级英语上册Unit7Howmuchar
- [高等教育]2017年八年级下数学教学工作小结
- [高等教育]湖南省怀化市2019届高三统一模拟考试(
- [高等教育]四年级下册科学_基础训练及答案教材
- [高等教育]城郊煤矿西风井管路伸缩器更换施工安全
- [高等教育]昆八中20182019学年度上学期期末考试
- [高等教育]项目部各类人员任命书
- [高等教育]上市公司经营水务产业的模式
- [高等教育]人教版高二化学第一学期第三章水溶液中
- [高等教育]【中考物理第一轮复习资料】四.压强与
- [高等教育]金坑水电站报废改建工程机电设备更新改
- [高等教育]高中生物教学工作计划简易版
- [高等教育]2017年西华大学攀枝花学院(联合办学)44
- [高等教育]最新整理超短爆笑英文小笑话大全
- 优秀教师继续教育学习心得体会
- 阳历到阴历的转换
- 留守儿童教育案例分析
- 华师17春秋学期《玩教具制作与环境布置
- 测速传感器新型安装装置的现场应用
- 人教版小学数学三年级下册第四单元
- 创业个人意向书
- 山东省潍坊市2012年高考仿真试题(三)
- [恒心][好卷速递]四川省成都外国语学校
- 多少人错把好转反应当成了病情加重处理
- 中外广播电视史复习资料整理
- 江苏省扬州市江都区宜陵镇中学2014-201
- 工程造价专业毕业实习报告
- 广西师范学院心理与教育统计
- aympkrq基于 - asp的博客网站设计与开
- 建筑业外出经营相关流程操作(营改增后
- 人治 德治 法治
- [精华篇]常识判断专项训练题库
- 中国共产党为什么要实行民主集中
- 小学数学第三册第一单元试卷(A、B、C




