已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编译技术 实验指导书 湘潭大学信息工程学院湘潭大学信息工程学院 计算机工程系计算机工程系 何春梅何春梅 2015 09 01 实实验验课课时时说说明明 编译技术 课总课时为 32 8 学时 其中实验 课时为 8 学时 课时分配为 前三个实验是必做实 验 其中 DFA 的模拟程序 2 学时 DFA 的化简 2 学 时 LL 1 文法判断程序 4 学时 后面 3 个实验为学 生根据自己安排选做实验 目目 录录 实验 1 DFA 模拟程序 1 实验 2 DFA 化简 2 实验 3 LL 1 文法判断程序 4 实验 4 基于预测分析表法的语法分析程序 1 5 实验 5 基于预测分析表法的语法分析程序 2 6 实验 6 中间代码生成 逆波兰式的产生与计算 8 实实验验 1 1 词词法法程程序序设设计计 D DF FA A 模模拟拟程程序序 一一 实实验验目目的的 通过实验教学 加深学生对所学的关于编译的理论知识的理解 增强学 生对所学知识的综合应用能力 并通过实践达到对所学的知识进行验证 通过 对 DFA 模拟程序实验 使学生掌握词法分析的实现技术 及具体实现方法 通过本实验加深对词法分析程序的功能及实现方法的理解 二二 实实验验环环境境 供 Windows 系统的 PC 机 可用 C C Java 等编程工具编写 三三 实实验验内内容容 1 定义一个右线性正规文法 示例如 仅仅供供参参考考 G S S aU bV U bV aQ V aU bQ Q aQ bQ 实验前要考虑清楚用哪种数据结构存储上述文法 2 构造其有穷确定自动机 如 3 利用有穷确定自动机 M K f S Z 行为模拟程序算法 来对于任意 给定的串 若属于该语言时 该过程经有限次计算后就会停止并回答 是 若不属于 要么能停止并回答 不是 K S c getchar while ceof do K f K c c getchar if K is in Z then return yes else return no 四四 实实验验方方式式与与要要求求 1 每每位位同同学学定定义义的的语语言言或或文文法法不不同同 上机编程实现 2 实验报告格式要求书书写写要要点点 概要设计 总体设计思想 详细设计 程 序主流程 自动机的存储格式 关键函数的流程图 结果分析 输入与输出 结果 存在问题及有待改进善的地方 实验心得 实实验验 2 2 D DF FA A 确确定定的的有有穷穷自自动动机机 的的化化简简 一一 实实验验目目的的与与要要求求 通过设计 编写和调试将确定的有穷自动机的状态数变为最少的 C 程序 使得学生掌握化简为有穷自动机的过程中的相关概念和方法 DFA 的表现形 式可以为表格或图形 二二 问问题题描描述述 每一个正规集都可以由一个状态数最少的 DFA 所识别 这个 DFA 是唯 一的 不考虑同构的情况 任意给定的一个 DFA 根据以下算法设计一个 C 程序 将该 DFA 化简为与之等价的最简 DFA 三三 算算法法 1 构造具有两个组的状态集合的初始划分 I 接受状态组 F 和非接 受状态组 Non F 2 对 I 采用下面所述的过程来构造新的划分 I new For I 中每个组 G do Begin 当且仅当对任意输入符号 a 状态 s 和读入 a 后转换到 I 的同 一组中 最坏情况下 一个状态就可能成为一个组 用所有新形成的小组集代替 I new 中的 G end 3 如果 I new I 令 I final I 再执行第 4 步 否则令 I I new 重复 步骤 2 4 在划分 I final 的每个状态组中选一个状态作为该组的代表 这些代 表构成了化简后的 DFA M 状态 令 s 是一个代表状态 而且假设 在 DFA M 中 输入为 a 时有从 s 到 t 转换 令 t 所在组的代表是 r 那么在 M 中有一个从 s 到 r 的转换 标记为 a 令包含 s0 的状态组的代表是 M 的开始 状态 并令 M 的接受状态是那些属于 F 的状态所在组的代表 注意 I final 的每个组或者仅含 F 中的状态 或者不含 F 中的状态 5 如果 M 含有死状态 即一个对所有输入符号都有刀自身的转换的非 接受状态 d 则从 M 中去掉它 删除从开始状态不可到达的状态 取消从任 何其他状态到死状态的转换 四四 基基本本要要求求 1 输入一个 DFA M 输出一个与之等价的最小化的 DFA M 上机编程实现 2 实验报告格式要求书写要点 概要设计 总体设计思想 详细设计 程序主流程 DFA 的存储格式 即数据结构 关键函数的流 程图 结果分析 输入与输出结果 存在问题及有待改进善的地方 实验心得 五五 测测试试数数据据 输入下图的 DFA M 得到其最简的 DFA M DFA M 六 实现提示 1 可将输入的 DFA 存放在外部文本文件中 也可以直接从 NFA 转换得 到 对 DFA 的最小化分两部分进行化简 即分别对状态 结点 和路 径 弧 进行最小化 最后输出最小化的 DFA 2 实现的数据结构 用链表实现 DFA 的构造 由结点链表和转换弧链表组成 struct node 结点的定义 int pos 结点在哪个组中 int num 结点的序号 int accept 结点是否为接受状态 struct node next NODE struct arc 弧的定义 int start 开始的顶点位置 char input 弧上所接受的输入字符 int end 结束的顶点位置 struct arc next ARC Struct groups 分组后各结点所在组的位置 int n 属于哪个组 int i 在组中的位置 GROUPs 3 实现方法 根据 accept 的值为 0 还是 1 进行初次划分 I 将 accept 为 0 的所有结点 构建成一个链表 将 accept 为 1 的所有结点构建一个链表 然后执行最小化 函数 对每一个输入字符遍历以上个链表 对每个结点 num 弧 start 的情况 查看该弧 end 的组号是否相等 相等则不划分 若不相等 则需进一步划分 构建新的链表等 划分完成后选头结点为代表 删除结点链表上其他结点 并将弧线链表上 需被删的弧 start 或弧 end 该为头结点 实实验验 3 3 L LL L 1 1 文文法法判判断断程程序序 一一 实实验验目目的的 首先能让用户输入一个文法 然后让计算机自动判断是否是一个 LL 1 文 法 通过实验教学 加深学生对所学的关于编译的理论知识的理解 增强学生 对所学知识的综合应用能力 并通过实践达到对所学的知识进行验证 二二 实实验验环环境境 供 Windows 系统的 PC 机 可用 C C Java 等编程工具编写 三三 实实验验步步骤骤 1 让计算机接受一个文法 示例如 仅仅供供参参考考 G S 为 S AB S bC A A b B B aD C AD C b D aS D c 1 2 编程实现对上述文法是否是 LL 1 文法的判断 是则给出肯定回答 否则给出否定回答 2 判别是否是 LL 1 文法 实验流程图如下 以链表或数组等数 据结构保存文法 求出能推出 的非 终结符 计算 FIRST 集 FOLLOW 集和 SELECT 集 SELECT A SELECT A 输出肯定 回答 是 输出否定回答 否 实实验验 4 4 5 5 基基于于预预测测分分析析表表法法的的语语法法分分析析程程序序 一一 实实验验目目的的 通过对基于 LL 1 文法的预测分析表法实现 DFA 模拟程序实验 使学生掌 握确定的自上而下的语法分析的实现技术 及具体实现方法 通过本实验加 深对语词法分析程序的功能及实现方法的理解 二二 实实验验环环境境 供 Windows 系统的 PC 机 可用 C C Java 等编程工具编写 三三 实实验验步步骤骤 1 定义一个 LL 1 文法 示例如 仅仅供供参参考考 G E E TE E TE T FT T FT F i E 2 构造其预测分析表 如 3 LL 1 文法的预测分析表的模型示意图 4 预测分析控制程序的算法流程 5 运行结果 示例如下 四四 实实验验方方式式与与要要求求 1 每位同学定义的文法不同 上机编程实现 2 实验报告格式要求书写要点 概要设计 总体设计思想 详细设计 程序主流程 自动机的存储格式 关键函数的流程图 结果分析 输入与输出结果 存在问题及有待改进善的地方 实验心得 实实验验 6 6 逆逆波波兰兰式式的的产产生生及及计计算算 一一 实实验验目目的的 将非后缀式用来表示的算术表达式转换为用逆波兰式来表示的算术表达式 并 计算用逆波兰式来表示的算术表达式的值 二二 实实验验内内容容 1 定义部分 定义常量 变量 数据结构 2 初始化 设立算符优先分析表 初始化变量空间 包括堆栈 结构体 数组 临时变量等 3 控制部分 从键盘输入一个表达式符号串 4 利用算符优先分析算法进行表达式处理 根据算符优先分析表对表达式符号 串进行堆栈 或其他 操作 输出分析结果 如果遇到错误则显示错误信息 5 对生成的逆波兰式进行计算 三三 实实验验预预习习提提示示 1 逆波兰式定义 将运算对象写在前面 而把运算符号写在后面 用这种表示法表示的表达式也 称做后缀式 逆波兰式的特点在于运算对象顺序不变 运算符号位置反映运算 顺序 采用逆波兰式可以很好的表示简单算术表达式 其优点在于易于计算机 处理表达式 2 产生逆波兰式的前提 中缀算术表达式 3 逆波兰式生成的实验设计思想及算法 1 首先构造一个运算符栈 此运算符在栈内遵循越往栈顶优先级越高的原则 2 读入一个用中缀表示的简单算术表达式 为方便起见 设该简单算术表达式 的右端多加上了优先级最低的特殊符号 3 从左至右扫描该算术表达式 从第一个字符开始判断 如果该字符是数字 则分析到该数字串的结束并将该数字串直接输出 4 如果不是数字 该字符则是运算符 此时需比较优先关系 做法如下 将该字符与运算符栈顶的运算符的优先关系相比较 如果 该字符 优先关系高于此运算符栈顶的运算符 则将该运算符入栈 倘若不是的话 则 将此运算符栈顶的运算符从栈中弹出 将该字符入栈 5 重复上述操作 1 2 直至扫描完整个简单算术表达式 确定所有字符都得到 正确处理 我们便可以将中缀式表示的简单算术表达式转化为逆波兰表示的简 单算术表达式 四四 逆逆波波兰兰式式计计算算的的实实验验设设计计思思想想及及算算法法 1 构造一个栈 存放运算对象 2 读入一个用逆波兰式表示的简单算术表达式 3 自左至右扫描该简单算术表达式并判断该字符 如果该字符是运算对象 则将该字符入栈 若是运算符 如果此运算符是二目运算符 则将对栈顶部的 两个运算对象进行该运算 将运算结果入栈 并且将执行该运算的两个运算对 象从栈顶弹出 如果该字符是一目运算符 则对栈顶部的元素实施该运算 将 该栈顶部的元素弹出 将运算结果入栈 4 重复上述操作直至扫描完整个简单算术表达式的逆波兰式 确定所有字符 都得到正确处理 我们便可以求出该简单算术表达式的值 五五 实实验验步步骤骤 一 准备 1 阅读课本有关章节 2 考虑好设计方案 3 设计出模块结构 测试数据 初步编制好程序 二 上课上机 将源代码拷贝到机上调试 发现错误 再修改完善 第二次上机调试通过 三 程序要求 程序输入 输出示例 输出的格式如下 1 逆波兰式的生成及计算程序 编制人 姓名 学号 班级 2 输入一以 结束的中缀表达式 包括 数字 在此位置输入符号串 如 28 68
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 拔罐烫伤课件
- 2025年专业技术人员继续教育公需科目-职业发展历年参考题库含答案解析
- 2025年特种设备检验人员资格考试(锅炉检验员GLY)历年参考题库含答案
- 2025年考研政治理论马克思主义基本原理测试试卷(含答案)
- 办公室流程课件
- 膀胱输尿管介绍课件
- 办公室岗位课件
- 办公模板课件
- 2026年人力资源管理《人力资源规划》模拟卷
- 2026年葡萄疏果模拟试卷及答案
- 2026-2027学年八年级上学期统编版历史期中测试卷(含答案)
- 分公司章程范本
- 开展岗位能力提升全员培训实施方案
- 肾内科科室规章制度
- 内蒙古呼和浩特市新城区2025-2026学年八年级上学期期中考试物理试卷(含答案)
- 2025年军队基层常用文书写作与范例
- GB/T 20118-2025钢丝绳通用技术条件
- 渐冻症课件教学课件
- 医院重点专科建设申报汇报
- 牙齿隐裂教学课件
- 人教版 浙教版 培智 生活语文五年级上册 部分教案
评论
0/150
提交评论