- 1、本文档共90页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理教学课件-第3章 词法分析
证明符号串为DFA M所接受的方法: 例:求与文法G[S]等价的NFA G[S]: S→aA|bB|ε A→aB|bA B→aS|bA|ε S Z A B a a a b b b ε ε 求得: 正规文法 NFA 正规式 6 5 4 3 1 2 DFA 最小化 转换方法 8 7 判断题 1.对任意一个右线性文法G,都存在一个NFA M,满足L(G) = L(M). 2.对任意一个右线性文法G,都存在一个DFA M,满足L(G) = L(M). 3.对任何正规表达式e,都存在一个NFA M,满足L(M) = L(e) . 4.对任何正规表达式e,都存在一个DFA M,满足L(M) = L(e) . LEX源程序 LEX 编译器 C程序 4.5 词法分析程序的自动生成工具—LEX C程序 C 编译器 词法分析程序 输入流 词法分 析程序 单词序列 4.5.1 LEX的源程序 一个LEX源程序主要由三个部分组成 说明部分 --可选 %% --必须有 识别规则 --必须有(LEX的核心) %% --可选 辅助过程 --可选 设L是一个有不确定的有穷自动机接受的集合,则存在一个接受L的确定的有穷自动机,有一种算法,将NFA转换成接受同样语言的DFA.这种算法称为子集法. 与某一NFA等价的DFA不唯一 3. NFA的确定化 从NFA的矩阵表示中可以看出,表项通常是一状态的集合,而在DFA的矩阵表示中,表项是一个状态。 NFA到相应的DFA的构造的基本思路是: DFA的每一个状态对应NFA的一组状态. 符号 状态 ε a b c 1 {4} {2,3} Φ Φ 2 Φ {2} {4} Φ 3 Φ Φ Φ {3,4} 4 Φ Φ Φ Φ 1 2 3 4 a b a c a c ε (1)ε 合并 如果有 ,则把S2合并到S1 S1 S2 ε 转换需解决的问题: i j k m ε a b a n (a) i,j m k a a b n (b) (2)状态合并 0 1 2 3 a a b c (a) 0 1,2 3 a b c (b) 定义1 状态集合I的?-闭包,表示为?-closure(I) ① 若q∈I,则q∈?-closure(I); ② 若q∈I,则从q出发经过任意条?弧而能到达的任何状态q都属于?-closure(I)。 为了使得NFA确定化,我们首先给出两个定义: ε_ closure(I) ε ε ε I I S2 S2 S1 S1 S3 S3 例: 如图所示的状态图: 令I={1}, 求ε-closure(I)=? 1 5 6 4 3 2 a ε a a ε 根据定义: ε-closure(I)={1,3} 课堂练习: 令I={1,2}, 求ε-closure(I)=? I是状态集,由I中的状态出发,经过一条a弧可能到达的状态的集合称为move(I,a),则 Ia= ε_closure ( move( I , a ) ) 定义2 Ia 子集 例:令 I={1} Ia=ε-closure(move(I,a)) =ε-closure(f(1,a)) =ε-closure({2,4})={2,4,6} 根据定义1,2,可以将上述的M’确定化(即可构造出状态 转换矩阵) 1 5 6 4 3 2 a ε a a ε 课堂练习: 令I={1,2,3} 求Ia =? 课堂练习: 令I={1},设S= ε-closure(I),求 S=? Sa =? 将从状态S出发经过任意条?弧所能到达的状态作为DFA的初态S 从S出发,把遇到输入符号a所转移到的后继状态集作为DFA的新状态 如此重复,直到不再有新的状态出现为止 NFA转换为DFA的思想 1 2 3 4 a b a c a c ε I Ia
文档评论(0)