- 1、本文档共81页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
词法分析-南京大学计算机系
正则表达式到NFA的例子(2) (a|b)的NFA 第二个a的NFA 正则表达式到NFA的例子(3) (a|b)*的NFA 词法分析器生成工具的设计 体系结构 词法分析器生成工具的功能 生成的词法分析器中包含一个模拟有穷自动机的模块 其余部分由生成工具根据词法规则的描述自动生成,包括 自动机的转换表 和动作相关的代码,适当的时候由模拟器调用。 构造自动机时 首先构造出各个模式对应的NFA 然后将这些NFA合并成为一个NFA (根据需要)进行确定化 NFA合并的方法 合并方法: 引入新的开始状态,并引入从这个开始状态到各个原开始状态的ε转换。 得到的NFA所接受的语言是原来各个NFA的语言的并集。 不同的接受状态可代表不同的模式。 不仅判断输入前缀是否NFA的语言,还需要知道对应于哪个模式 确定化NFA后的处理 对得到的NFA进行确定化,得到DFA。 一个DFA的接受状态对应于NFA状态的集合,其中至少包括一个NFA接受状态 如果其中包括多个对应于不同模式的NFA接受状态,则表示当前的输入前缀对应于多个模式,存在冲突。 找出第一个这样的模式,将这个模式作为这个DFA接受状态的输出。 例子(1) 假设有三个模式 a {A1} abb {A2} a*b+ {A3} 构造各模式的NFA如右 例子(2) 合并NFA 2:模式1 6:模式2 8:模式3 例子(3) 确定化得到如下DFA DFA状态68对应NFA状态集合{6,8},对应的模式是abb(第二个模式),而不是a*b+(第三个模式) 运行的方式 模拟DFA,不断读入输入字符串中的字符 直到某一时刻没有后继为止(不是到达某个接受状态) 注意:根据本教材的定义,DFA总是有后继的。 这里是指DFA进入了死状态,即永远不可能到达接受状态的状态。 这样可以找到最长可能的词素。 回头查找最后的接受状态,执行相应的动作。 如果查不到,报词法错 在回退时,需要同时回退读入的字符 DFA状态数量的最小化 一个正则语言可对应于多个识别此语言的DFA。 通过DFA的最小化可得到状态数量最少的DFA(不计同构,这样的DFA是唯一的)。 两个等价的DFA:都识别(a|b)*abb 状态的区分 基本思想是合并等价的状态。 状态的可区分 如果存在串x,使得从状态s1和s2,一个到达接受状态而另一个到达非接受状态,那么x就区分了s1和s2 如果存在某个串区分了s和t,我们说s和t就是可区分的;否则s和t就是不可区分的。 不可区分的两个状态就是等价的,可以合并 空串区分了E和其它状态 bb区分了A和B 注意:上面定义中使用的DFA中,对于每个状态/每个符号,有且只有一条出边。 DFA最小化算法 把所有可区分的状态分开。区分的过程是一个迭代的过程 基本步骤:ε区分了接受状态和非接受状态 归纳步骤:如果s和t是可区分的,且s’到s、t’到t有标号为a的边,那么s’和t’也是可区分的。 最终没有区分开的状态就是等价的。 所有的死状态都是等价的。 第二步骤:从划分得到的等价类中选取代表,并重建DFA。 最小化算法(分划部分) 设置初始分划П={S-F,F} 迭代,不断分划: for (П中的每个元素G){ 细分G,使得G中的s、t仍然在同一组中 iff 对任意a,s、t都到达П中的同一组; Пnew=将П中的G替换为细分得到的小组; } 如果Пnew==П,令Пfinal==П,算法完成;否则П==Пnew,转步骤2; 最小化算法(构造部分) 在Пfinal的每个组中选择一个状态作代表,作为最小DFA的状态 开始状态就是包含原开始状态的组的代表 接受状态就是包含了原接受状态的组的代表(这个组一定只包含接受状态) 转换关系构造如下: 如果s是G的代表,而原DFA中s在a上的转换到达t,且t所在组的代表为r,那么最小DFA中有从s到r的、在a上的转换。 DFA最小化的例子 初始分划:{A,B,C,D} {E} 处理{A,B,C,D},b把它细分为{A,B,C} {D}。 处理{A,B,C},b把它细分为{A,C} {B} 分划完毕。选取A,B,D和E最为代表,构造得到最小DFA。 词法分析器状态的最小化 基本思想和DFA最小化算法相同 差别 语法分析器中的接受状态对应于不同的模式 对应不同模式的接受状态一定是不等价的 初始分划为: 所有非接受状态集合 +对应各模式的接受状态集合 其余细分的方法和构造的方法均相同。 接受状态对应的模式就是原来的模式。 例子 增加状态Φ 初始分划:{0137, 7} {247} {8,58}{68}{Φ} * 内容 词法分析器的作用 词法单元的规约 词法单元的识别 词法分析器生成工具Lex 有穷自动机 从正则表达式到自动机 词法分析器生成工具的设计方法 词法分析工
文档评论(0)