ImageVerifierCode 换一换
格式:DOC , 页数:63 ,大小:386.09KB ,
资源ID:2999227      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-2999227.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(编译原理实验指导书(李宏芒).doc)为本站会员(tangtianxu1)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

编译原理实验指导书(李宏芒).doc

1、1 编 译 原 理 实 验 指 导 书李宏芒 编 写适用专业: 计算机科学与技术合肥工业大学计算机与信息学院2012 年 12 月2前 言 编 译 原 理 是 计 算 机 专 业 的 一 门 核 心 课 程 , 在 计 算 机 本 科 教 学 中 占 有 十 分 重要 的 地 位 。 由 于 编 译 原 理 课 程 兼 有 很 强 的 理 论 性 和 实 践 性 , 并 且 编 译 程 序 构 造的 算 法 比 较 复 杂 , 因 而 让 学 生 在 学 习 时 普 遍 感 到 内 容 抽 象 、 不 易 理 解 , 难 易 掌 握 。但 是 掌 握 编 译 原 理 的 基 本 理 论 和 设

2、 计 思 想 是 非 常 重 要 的 , 尤 其 是 将 本 课 程 的 理 论 知识 与 计 算 机 应 用 中 的 许 多 领 域 紧 密 联 系 与 广 泛 应 用 结 合 , 将 有 利 于 提 高 学 生 专 业 素质 和 适 应 社 会 多 方 面 需 要 的 能 力 , 因 此 , 通 过 理 论 授 课 和 上 机 实 践 相 结 合 , 使 学 生 对编 译 的 基 本 概 念 、 原 理 和 方 法 有 完 整 的 和 清 楚 的 理 解 , 并 能 正 确 地 、 熟 练 地 加 以 运用 ; 通 过 实 验 逐 步 提 高 学 生 的 编 程 能 力 和 调 试 程 序

3、 的 能 力 以 及 解 决 实 际 问 题 的 能 力 ,使 学 生 培 养 出 扎 实 的 软 件 开 发 基 本 技 能 , 并 养 成 良 好 的 编 程 风 格 , 为 进 一 步 学 习 后续 课 程 和 将 来 从 事 应 用 软 件 开 发 奠 定 良 好 的 基 础 。3实验课时具体内容安排如下:序号 实验名称 课时 必(选)做实验一 词法分析设计 4 必做实验二 LL(1)预测分析 4 必作实验三 LR 语法分析设计 4 必做实验四 逆波兰表达式的产生及计算 3 选做实验五 应用 DAG 进行局部优化 3 选做实验六 C 语言子集编译程序 课外 选做一、实验课的性质和目的(

4、1)深刻理解程序语言编译系统的结构及各部分的功能。(2)熟练掌握设计和构造程序语言编译系统的基本原理和技术。(3)能独立编写清晰、工整、结论正确的编译原理的源程序。(4)能学会上机进行正确调试,并进行程序修改。即培养发现程序错误,排除错误的能力和经验。二、实验课的基本要求:(1)掌握编译程序的功能和结构。(2)掌握词法分析器的设计方法与实现步骤加深对讲授内容的理解,尤其是一些语法给定,通过上机实验帮助掌握。(3)掌握语法分析器的设计方法与实现步骤。(4)掌握符号表和存储空间的组织。(5)掌握代码优化的作用与实现方法(6)掌握错误的诊断和校正方法。三、主要实验教学方法实 验 前 , 由 任 课

5、教 师 落 实 实 验 任 务 , 每 个 学 生 必 须 事 先 独 立 完 成 好 程 序 的 设 计的 源 程 序 编 写 工 作 。 实 验 课 上 对 疑 难 点 作 集 中 辅 导 。 实 验 过 程 中 随 时 针 对 不 同4的 情 况 作 个 别 启 发 式 辅 导 。 实 验 后 , 学 生 撰 写 并 提 交 实 验 报 告 。 最 后 , 由 实 验 教师 根 据 每 个 学 生 的 编 程 、 上 机 调 试 能 力 、 编 程 能 力 和 实 验 结 果 及 实 验 报 告 综 合 评 定学 生 的 实 验 成 绩 。四、实验的重点与难点:对 词 法 分 析 设 计

6、 、 语 法 分 析 设 计 和 中 间 代 码 的 产 生 、 代 码 优 化 等 是 本 课 程 实践 性 环 节 的 重 点 和 难 点 。五、实验教学手段通 过 本 课 程 的 课 内 实 验 , 使 学 生 上 机 编 程 、 调 试 来 验 证 和 巩 固 所 学 的 编 译 原理 理 论 及 概 念 , 逐 步 掌 握 词 法 分 析 的 设 计 方 法 及 实 现 技 术 。 软 件 实 验 室 为 为 每 个 学生 提 供 了 一 台 具 有 WINDOWS 98/XP/NT/2000 操 作 系 统 的 计 算 机 和VC+/VB/JAVA/TC 等软件环境。六、实验考核成

7、绩编译原理是一门实践性很强的课程,要求在教学过程中必须十分重视实践 性 环 节 , 包 括 平 时 练 习 作 业 、 记 分 作 业 、 上 机 实 验 等 。 尤 其 是 要 注 重 上 机 实 验 的重 要 性 , 必 须 通 过 上 机 实 践 才 能 真 正 掌 握 所 学 的 知 识 和 技 能 , 所 以 要 特 别 强 调 实 验也 将 作 为 考 核 成 绩 的 依 据 。 实 验 成 绩 占 平 时 成 绩 的 20%。 每 次 必 须 完 成 规 定 的 实 验内 容 , 并 及 时 写 出 实 验 报 告 。七、实验报告内容:1实验题目、班级、学号、姓名、完成日期。2写

8、出数据结构及生成的算法描述。3画出算法流程图。4打印出源程序代码和给出测试的结果。5实验的评价、收获与体会。写出在调试过程中出现的问题和解决的措施;分析讨论对策成功或失败的原因。5目 录前 言 .2实验一 词法分 析 设计 6实验二 LL(1)分析 法 13实验三 LR(1)分 析 法 .16实验四 逆波兰 表 达式的产 生及计 算 .21实验五 应用 DGA 进行局部 优化 .26实验六 C 语言 子集 编译程序 (可选 ) .306实验一 词法分析设计实验学时:4实验类型:综合实验要求:必修一、实验目的通 过 本 实 验 的 编 程 实 践 , 使 学 生 了 解 词 法 分 析 的 任

9、务 , 掌 握 词 法 分 析 程 序 设计 的 原 理 和 构 造 方 法 , 使 学 生 对 编 译 的 基 本 概 念 、 原 理 和 方 法 有 完 整 的 和 清 楚 的 理解 , 并 能 正 确 地 、 熟 练 地 运 用 。二、实验内容用 VC+/VB/JAVA 语 言 实 现 对 C 语言子集的源程序进行词法分析。通过输入 源 程 序 从 左 到 右 对 字 符 串 进 行 扫 描 和 分 解 , 依 次 输 出 各 个 单 词 的 内 部 编 码 及 单词 符 号 自 身 值 ; 若 遇 到 错 误 则 显 示 “Error”, 然 后 跳 过 错 误 部 分 继 续 显 示

10、 ; 同 时进 行 标 识 符 登 记 符 号 表 的 管 理 。以下是实现词法分析设计的主要工作:(1)从源程序文件中读入字符。(2)统计行数和列数用于错误单词的定位。(3)删除空格类字符,包括回车、制表符空格。(4)按拼写单词,并用(内码,属性)二元式表示。(属性值token 的机内表示)(5)如果发现错误则报告出错7(6)根据需要是否填写标识符表供以后各阶段使用。单词的基本分类: 关键字:由程序语言定义的具有固定意义的标识符。也称为保留字例如if、 for、while、printf ; 单 词 种 别 码 为 1。 标识符:用以表示各种名字,如变量名、数组名、函数名; 常数: 任何数值常

11、数。如 125, 1,0.5,3.1416; 运 算 符 : +、-、*、/; 关 系 运 算 符 : 、=、+TG|TG(3)G-(4)T-FS(5)S-*FS|/FS(6)S-(7)F-(E)(8)F-i输出的格式如下:15五、实验步骤1、根据流程图编写出各个模块的源程序代码上机调试。2、 编 制 好 源 程 序 后 , 设 计 若 干 用 例 对 系 统 进 行 全 面 的 上 机 测 试 , 并 通 过 所 设 计 的 LL(1)分析程序;直至能够得到完全满意的结果。3、书写实验报告 ;实验报告正文的内容: 写 出 LL( 1)分 析 法 的 思 想 及 写 出 符 合 LL(1)分析

12、法的文法。 程 序 结 构 描 述 : 函 数 调 用 格 式 、 参 数 含 义 、 返 回 值 描 述 、 函 数 功 能 ; 函 数之 间 的 调 用 关 系 图 。 详细的算法描述(程序执行流程图) 。 给出软件的测试方法和测试结果。 实验总结 (设计的特点、不足、收获与体会) 。16实验三 LR(1)分析法实验学时:4实验类型:验证实验要求:必修一、实验目的构造 LR(1)分析程序,利用它进行语法分析,判断给出的符号串是否为该文法识别的句子,了解 LR(K)分析方法是严格的从左向右扫描,和自底向上的语法分析方法。二、实验内容对下列文法,用 LR(1)分析法对任意输入的符号串进行分析:

13、(1)E- E+T(2)E-T(3)T- T*F(4)T-F(5)F- (E)(6)F- i三、 LR( 1)分析法实验设计思想及算法(1)总控程序,也可以称为驱动程序。对所有的 LR 分析器总控程序都是相同的。(2)分 析 表 或 分 析 函 数 , 不 同 的 文 法 分 析 表 将 不 同 , 同 一 个 文 法 采 用 的 LR 分析器 不同 时 , 分 析 表 将 不 同 , 分 析 表 又 可 以 分 为 动 作 表 ( ACTION) 和 状 态 转 换 ( GOTO)表两个部分,它们都可用二维数组表示。(3)分析栈,包括文法符号栈和相应的状态栈,它们均是先进后出栈。分析器的动作

14、就是由栈顶状态和当前输入符号所决定。 LR 分析器由三个部分组成:17 其中:SP 为栈指针,Si为状态栈,Xi 为 文 法 符 号 栈 。 状 态 转 换 表 用GOTOi,X=j 表 示 , 规 定 当 栈 顶 状 态 为 i, 遇 到 当 前 文 法 符 号 为 X 时应转 向 状 态 j,X 为终结符或非终结符。 ACTIONi, a规 定 了 栈 顶 状 态 为 i 时 遇 到 输 入 符 号 a 应 执 行 。 动 作 有 四 种可 能 :(1)移进:actioni,a = Sj: 状 态 j 移 入 到 状 态 栈 , 把 a 移 入 到 文 法 符 号 栈 , 其 中 i,j

15、表示状态号。(2)归约:actioni,a=rk: 当 在 栈 顶 形 成 句 柄 时 , 则 归 约 为 相 应 的 非 终 结 符 A,即文法 中 有 A- B 的 产 生 式 , 若 B 的 长 度 为 R(即|B|=R),则从状态栈和文法符号栈中自 顶 向 下 去 掉 R 个 符 号 , 即 栈 指 针 SP 减 去 R, 并 把 A 移入文法符号栈内,j=GOTOi,A移进状态栈,其中 i 为修改指针后的栈顶状态。(3)接受 acc:当 归 约 到 文 法 符 号 栈 中 只 剩 文 法 的 开 始 符 号 S 时 , 并 且 输 入 符 号 串 已 结 束 即当 前 输 入 符 是

16、 #,则为分析成功。(4)报错:当 遇 到 状 态 栈 顶 为 某 一 状 态 下 出 现 不 该 遇 到 的 文 法 符 号 时 , 则 报 错 , 说 明 输入 端 不 是 该 文 法 能 接 受 的 符 号 串 。18四、实验要求1、编程时注意编程风格:空行的使用、注释的使用、缩进的使用等。2、如果遇到错误的表达式,应输出错误提示信息。3、程序输入/输出实例:输入一以#结束的符号串(包括+*()i#) :在此位置输入符号串输出过程如下:步骤 状态栈 符号栈 剩余输入串 动 作1 0 # i+i*i# 移进i+i*i 的 LR 分析过程步骤 状态栈 符号栈 输入串 动作说明1 0 # i+

17、i*i# ACTION0,i=S5,状态 5 入栈2 05 #i +i*i# r6: F i 归约,GOTO(0,F)=3 入栈3 03 #F +i*i# r4: TF 归约,GOTO(0,T)=3 入栈4 02 #T +i*i# r2: ET 归约,GOTO(0,E)=1 入栈195 01 #E +i*i# ACTION1,+=S6,状态 6 入栈6 016 #E+ i*i# ACTION6,i=S5,状态 5 入栈7 0165 #E+i *i# r6: F i 归约,GOTO(6,F)=3 入栈8 0163 #E+F *i# r4: TF 归约,GOTO(6,T)=9 入栈9 0169 #

18、E+T *i# ACTION9,*=S7,状态 7 入栈10 01697 #E+T* i# ACTION7,i=S5,状态 5 入栈11 016975 #E+T*i # r6:Fi 归约,GOTO(7,F)=10 入栈12 0169710 #E+T*F # r3: TT*F 归约,GOTO(6,T)=9 入栈13 0169 #E+T # r1:EE+T,GOTO(0,E)=1 入栈14 01 #E # Acc:分析成功4、输入符号串为非法符号串(或者为合法符号串)算术表达式文法的 LR 分析表ACTION GOTO状态 i + * ( ) # E T F0 S5 S4 1 2 31 S6 ac

19、c2 r2 S7 r2 r23 r4 r4 r4 r44 S5 S4 8 2 35 r6 r6 r6 r66 S5 S4 9 37 S5 S4 108 S6 S119 r1 S7 r1 r110 r3 r3 r3 r311 r5 r5 r5 r5五、实验步骤1、根据流程图编写出各个模块的源程序代码上机调试。202、编制好源程序后,设计若干用例对系统进行全面的上机测试,并通过所设计的 LR(1)语法分析程序;直至能够得到完全满意的结果。3、书写实验报告 ;实验报告正文的内容: 描 述 LR(1)语法分析程序的设计思想。 程 序 结 构 描 述 : 函 数 调 用 格 式 、 参 数 含 义 、

20、返 回 值 描 述 、 函 数 功 能 ; 函 数之 间 的 调 用 关 系 图 。 详细的算法描述(程序执行流程图) 。 给出软件的测试方法和测试结果。 实验总结 (设计的特点、不足、收获与体会) 。21实验四 逆波兰表达式的产生及计算实验学时:3实验类型:验证实验要求:选修一、实验目的非后缀式用来表示的算术表达式转换为用逆波兰式来表示的算术表达式,并计算用逆波兰式来表示的算术表达式的值。二、实验内容将非后缀式用来表示的算术表达式转换为用逆波兰式来表示的算术表达式, 并计算用逆波兰式来表示的算术表达式的值。三、逆波兰表达式的产生及计算实验设计思想及算法 逆波兰式定义将 运 算 对 象 写 在

21、 前 面 , 而 把 运 算 符 号 写 在 后 面 。 用 这 种 表 示 法 表 示 的 表 达 式也 称 做 后 缀 式 。 逆 波 兰 式 的 特 点 在 于 运 算 对 象 顺 序 不 变 , 运 算 符 号 位 置 反 映 运 算 顺序 。 产生逆波兰式的前提中缀算术表达式 逆波兰式生成的设计思想及算法(1)首先构造一个运算符栈,此运算符在栈内遵循越往栈顶优先级越高的原则。(2)读入一个用中缀表示的简单算术表达式,为方便起见,设该简单算术表达式的右端多加上了优先级最低的特殊符号 “#”。(3)从左至右扫描该算术表达式,从第一个字符开始判断,如果该字符是数字, 则分析到该数字串的结束

22、并将该数字串直接输出。(4)如果不是数字,该字符则是运算符,此时需比较优先关系。做 法 如 下 : 将 该 字 符 与 运 算 符 栈 顶 的 运 算 符 的 优 先 关 系 相 比 较 。 如 果 , 该 字 符 优先 关 系 高 于 此 运 算 符 栈 顶 的 运 算 符 , 则 将 该 运 算 符 入 栈 。 倘 若 不 是 的 话 , 则 将 此22运算符栈顶的运算符从栈中弹出,将该字符入栈。(5)重复上述操作(1)-(2)直 至 扫 描 完 整 个 简 单 算 术 表 达 式 , 确 定 所 有 字 符 都 得 到 正确 处 理 , 我 们 便 可 以 将 中 缀 式 表 示 的 简

23、 单 算 术 表 达 式 转 化 为 逆 波 兰 表 示 的 简 单 算 术表 达 式 。运用以上算法分析表达式(a+b*c)*d 的过程如下:当前符号 输入区 符号栈 输出区( a+b*c)*da +b*c)*d (+ *c)*d ( ab c)*d (+ a* )*d (+ abc *d (+* ab) *d (+* abc) *d (+ abc*) d ( abc*23* abc*+d * abc*+* abc*+dabc*+d(1)构造一个栈,存放运算对象。(2)读入一个用逆波兰式表示的简单算术表达式。(3)自左至右扫描该简单算术表达式并判断该字符,如果该字符是运算对象,则将 该 字

24、符 入 栈 。 若 是 运 算 符 , 如 果 此 运 算 符 是 二 目 运 算 符 , 则 将 对 栈 顶 部 的 两 个 运算 对 象 进 行 该 运 算 , 将 运 算 结 果 入 栈 , 并 且 将 执 行 该 运 算 的 两 个 运 算 对 象 从 栈 顶 弹出 。 如 果 该 字 符 是 一 目 运 算 符 , 则 对 栈 顶 部 的 元 素 实 施 该 运 算 , 将 该 栈 顶 部 的 元 素弹 出 , 将 运 算 结 果 入 栈 。(4)重复上述操作直至扫描完整个简单算术表达式的逆波兰式,确定所有字符都得到正确处理,我们便可以求出该简单算术表达式的值。 逆波兰式计算的设计思

25、想及算法四、实验要求241、编程时注意编程风格:空行的使用、注释的使用、缩进的使用等。2、如果遇到错误的表达式,应输出错误提示信息。3、程序输入/输出实例: 输入以#结束的中缀表达式(包括+ - */()数字 #)。例:(1)(a+b) (2)(a+b*c) (3) B+(-(A)*C输出逆波兰表达式的格式如下:(1) (a+b) ;ab+)(2)(a+b*c)abc*+)(3)B+(-A(A) *CBA)(-)(C*+ 输入中缀表达式并计算结果:a* (b+c)+(-d)#; 输 出 逆 波 兰 式 :abc+*d+输入:a=3; b=1;c=2;d=5;计算结果为:425五、实验步骤1、根

26、据流程图编写出各个模块的源程序代码上机调试。2、 编 制 好 源 程 序 后 , 设 计 若 干 用 例 对 系 统 进 行 全 面 的 上 机 测 试 , 并 通 过 所 设 计 的逆 波 兰 式 的 产 生 及 计 算 程 序 ; 直 至 能 够 得 到 完 全 满 意 的 结 果 。3、书写实验报告 ;实验报告正文的内容: 描述逆波兰式的产生及计算程序的设计思想。 程 序 结 构 描 述 : 函 数 调 用 格 式 、 参 数 含 义 、 返 回 值 描 述 、 函 数 功 能 ; 函 数之 间 的 调 用 关 系 图 。 详细的算法描述(程序执行流程图) 。 给出软件的测试方法和测试结

27、果。 实验总结 (设计的特点、不足、收获与体会) 。26实验五 应用 DGA 进行局部优化实验学时:3实验类型:设计实验要求:选修一、实验目的使 学 生 通 过 本 次 实 验 , 能 够 对 程 序 优 化 技 术 有 一 定 的 了 解 , 掌 握 利 于 DGA进行局部优化的方法。二、实验内容对给定的四元式序列:(1) :T1= A*B(2) :T2= 3/2(3) :T3= T1-T2(4) : X=T3(5) :C =5(6) :T4= A*B(7) :C =2(8) :T5= 18+C(9) :T6= T4*T6(10) : Y=T6要 求 : 构 造 其 相 应 的 DGA, 并

28、 利 于 DGA 进 行 了 删 除 无 用 赋 值 、 消 除 公 共 子 表 达式 、 合 并 已 知 量 等 到 局 部 优 化 技 术 进 行 优 化 ; 再 从 所 得 到 的 DGA 重建四元式序列。三、 LR( 1)分析法实验设计思想及算法由基本块构造 DGA 的算法描述如下:for (i=0; i = = != ; : , ( )3.其他标记 ID 和 NUM通 过 以 下 正 规 式 定 义 其 他 标 记 : ID letter(letter|digit)* NUMdigit(digit)* letter a| |z|A| |Z digit 0| |94.空格由空白、制表符和换行符组成空格一般用来分隔 ID、NUM、专用符号和关键字,词法分析阶段空格通常被忽略。各种单词符号对应的类别码:(采用一符一类别码,见下表)

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报