编译原理设计性实验四:词法分析算法实现.pdf

编译原理设计性实验四:词法分析算法实现.pdf

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《编译原理》设计性实验四: 正规式和有穷自动机 实验目的:掌握正规式转换为不确定的有穷自动机,不确定的有穷自动机的确定化,确定的 有穷自动机的最简化的算法实现过程。 实验要求:在 6 学时内完成,要求以表格或图形的方式实现。 实验内容:分为如下 3 个部分完成: 4.1 正规式转换为不确定的有穷自动机的过程模拟 【目的与要求】 【目的与要求】 通过设计、编写和调试将正规式转换为不确定的有穷自动机的程序,使学生了解 Thompson 算法,掌握转换过程中的相关概念和方法,NFA 的表现形式可以是表格或图形。 【问题描述】 【问题描述】 任意给定一个正规式 r (包括连接、或、闭包运算),根据 Thompson 算法设计一个程序, 生成与该正规式等价的 NFA N 。 【算法描述】 【算法描述】 对于Σ上的每个正规式 R ,可以构造一个Σ上的NFA M ,使得L(M)=L(R) 。 步骤 1:首先构造基本符号的有穷自动机。 正规式 φ,构造NFA 为:⇒ 对应正规式 ε,构造NFA 为: ⇒ 对应正规式 a,构造NFA 为: ⇒ 步骤 2 :其次构造连接、或和闭包运算的有穷自动机。 s,t 是正规式,相应 NFA 为 N(s),N(t) ,则正规式 R=s|t 的 NFA(R) 为: s,t 是正规式,相应 NFA 为 N(s),N(t) ,则正规式 R=st 的 NFA(R) 为: s 是正规式,相应 NFA 为N(s) , 则正规式 R=s* 的NFA(R) 为: 【基本要求】 【基本要求】 算法实现的基本要求是: (1) 输入一个正规式 r ; (2) 输出与正规式 r 等价的 NFA 。 【测试数据】 【测试数据】 输入正规式:(a|b)*(aa|bb)(a|b)* 得到与之等价的 NFA N 【输出效果】 【输出效果】 注:上图中的“# ”代表ε。 【实现提示】 【实现提示】 1.NFA 的表示可以是图形或表格形式,状态之间的变换也可以直接表示为每两个状态 一组,表示为起始状态输入字符到达状态,如①a②,表示在①状态下读入输 入符号 a,变换到②状态。 2.实现时的数据结构定义如下: (1) 用字符串存储正规式; (2) 用结构体链表存放状态转换图 struct NFA { int from; int to; char *varch; }表示从状态 from 到状态 to ,经过字符串varch 。 (3) 中间过程使用堆栈完成。 3 .实现过程 各运算符之间有优先关系,首先构造优先表,如表 8.3,然后通过符号栈及运算符栈(将 (、)、连接、或、及闭包运算作为运算符)来实现,采用算符优先原则进出栈或运算。初始 时添加开始和结束状态,将开始状态和#压入堆栈,并从左到右扫描输入符号串,遇到下一 个优先性低的运算符则出栈运算构造 NFA,碰到下一个优先性高的运算符则将运算符进栈。 表 8.3 正规式算符间的优先关系 i+1 | ( ) # i . | ( = 错误 ) 错误 # 错误 =

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档