- 1、本文档共116页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
本章将介绍正规文法和有穷自动机之间的关系,所涉及的内容是编译中词法分析技术和自动生成词法分析程序的理论。;教学要求
掌握:正规式,DFA的概念,NFA的概念
理解:将DFA 转换为NFA,正规文法与有穷自动机间的转换
重点:正规式构造DFA,DFA最小化
难点:正规表达式构造DFA;一、正规式
二、正规文法到正规式
三、确定有穷自动机
四、不确定有穷自动机
五、 NFA转换为等价的DFA
六、 DFA的化简
七、正规式和有穷自动机的等价
八、正规文法和有穷自动机的等价性*
典型例题及解答;知识结构;一、 正规式和正规集;正规式和正规集的递归定义:
对给定的字母表?
1)? 和?都是?上的正规式,它们所表示的正规集为{?}和?;
2) 任何a?? ,a是?上的正规式,它所表示的正规集为{a} ;;3) 假定e1和e2都是?上的正规式,它们所表示的正规集为L(e1)和L(e2),则
i) (e1|e2)为正规式,它所表示的正规集为L(e1)?L(e2),
ii) (e1.e2)为正规式,它所表示的正规集为L(e1)L(e2),
iii) (e1)*为正规式,它所表示的正规集为(L(e1))*,
仅由有限次使用上述三步骤而定义的表达式才是?上的正规式,仅由这些正规式表示的字集才是?上的正规集。;正规式;其中的“?”读为“或”(也有使用“+”代替 “?” 的
);“? ”读为“连接”;“?”读为“闭包”(即,任
意有限次的自重复连接)。在不致混淆时,括号可省去,
但规定算符的优先顺序为“?”、“?”、“?”、“? ”、
“?” 。连接符“? ”一般可省略不写。“?”、“? ”和
“?” 都是左结合的; ;例2:令?={d,? ,e,+,-},则?上的正规式为:
d*(.dd*| ?)(e(+|-|?)dd*|?)表示的是无符号数。
其中d为0~9中的数字。
比如:2,12.59,3.6e2,471.88e-1等都是正规式表示集合中的元素。;若两个正规式e1和e2所表示的正规集相同,则说e1和e2等价,写作e1=e2。
例如: e1= (a?b), e2 = b?a
又如: e1= b(ab)? , e2 =(ba)?b
e1= (a?b)? , e2 =(a??b?)?;对正规式,下列等价成立:
e1|e2 = e2|e1 交换律
e1 |(e2|e3) = (e1|e2)|e3 结合律
e1(e2e3) = (e1e2)e3 结合律
e1(e2|e3) = e1e2|e1e3 分配律
(e2|e3)e1 = e2e1|e3 e1 分???律
e? = ? e = e e1e2 e2 e1
S*=(S|ε)* ?是“连接”的恒等元素(零一律)
(a*)*=a*;对于任意一个正规文法,存在一个同一语言的正规式。对每一个正规式,存在一个正规文法。;? 对形如A→x*y的产生式,重写为:
A→xB
A→y
B→xB
B→y
B为新的非终结符,B? VN;例:将R=a(a|d)*变换成正规文法。令S是文法开始符号。;最后得到:;???正规文法?正规式
转换规则:
? A→xB,B→y 正规式为: A=xy
? A→xA|y 正规式为: A=x*y
? A→x,A→y 正规式为: A=x|y ;S→ aA
S→ a
A→ aA
A→ dA
A→ a
A→ d;S=a( (a|d)*(a|d)) |a
=a(a|d)+|a
=a((a|d)+|?)= a(a|d)+; 三、确定的有穷自动机DFA;一个确定的有穷自动机M是一个五元组:
M=(Q,Σ,f,q0,Z),其中:
① Q是一个有穷集,每个元素表示一个状态;
②Σ是一个有穷字母表,每个元素是一个输入字符;
③ f是转换函数,是在Q×Σ→Q上的映象,如:
f(Qi ,a)= Qj (Qi, Qj?Q);
④ q0是初态, q0 ?K;
⑤ Z?Q,是终态集。 ; 方法如下:
初始态用 “-”或“?”表示;
终态点用 “+” 或“?” 表示;
若f(Ki ,a)= Kj ,则从状态点Ki 到Kj画弧,标记为a。;状态转换图(也称状态变迁图)是一张有限方向图。有限个状态,用结点表示状态,其中有一个初态(初态用箭头指出),至少有一个终态(终态用双圈表示)。状态之间用带箭头的弧线连结,弧线上标记的字符表示在射出状态下可能出现的输入字符或字符类。;一个状态图可用于识别一定的字符串,大多数程序设计语言的单词符号都可以用转换图来识别。;例如:DFA M=({0,1,2,3},{a,b},f,0,
文档评论(0)