教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 高等教育 >

编译原理实验指导(5)

来源:网络收集 时间:2026-09-06
导读: 八、思考题 1、 语法制导翻译的工作方式? 2、 为什么编译程序要设计生成中间代码方式? 16 实验7 语法制导的三地址代码生成 一、实验目的 掌握计算机语言的语法分析程序设计与属性文法应用的实现方法。 二、实验内

八、思考题

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

…… 此处隐藏:150字,全部文档内容请下载后查看。喜欢就下载吧 ……
编译原理实验指导(5).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/613479.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)