- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第03章作业
第三章 词法分析;(1)构造与1(0|1)*101等价的 NFA;(2)将NFA转换成DFA
采用子集法,即DFA的每个状态对应NFA的一个状态集合
构造DFA的状态集C,假定C={T0,T1,…Ti},
其中T0= ε- closure(A0), 对于任何a∈Σ
Tia= ε-closure(Move(Ti,a));A0;DFA的状态转换图;首先,将状态分成两个子集:一个由终态组成,一个由非终态组成: { T0,T1,T2,T3,T4 } { T5 }
{ T0,T1,T2,T3} { T4 } { T5 }
{ T0,T1,T2} {T3} { T4 } { T5 }
{ T0} {T1,T2} {T3} { T4 } { T5 } ;在等价状态子集{T1,T2}中选状态T2做代表,消去其他状态T1,把从消去状态T1射出和射入的弧都引到代表状态T2上;作业中的问题:
只给出了NFA,没有转换成DFA,或者没有进行DFA的化简
按课本上的方法构造的NFA,这种方法引进的状态个数和标记为ε的边较多,给转换成DFA带来了麻烦,容易出错;区分NFA和DFA:
NFA有标记为ε的边而DFA没有
DFA中一个状态对应一个输入符,转向一个状态,而NFA中一个状态对应一个输入符,转向一个状态集合。
;第2题 给出下述文法所对应的正则式:
S → 0A | 1B A → 1S | 1 B → 0S | 0;1. 将每条产生式改写为正规式
由S → 0A | 1B 得 S=0A | 1B
(用规则3:A→x A→y得 A=x|y)
由A → 1S | 1 得A=1S | 1 (用规则3)
由B → 0S | 0 得B=0S | 0 (用规则3);作业中的问题
正规文法到正规式可以直接转换,不用将正规文法转换成DFA,再将DFA转换成正规式
错误1:将(01|10)*(01|10)写成= (01|10)*
错误2:将(01|10)*(01|10)写成(01|10)+,在正规式中可以出现的算符只有‘.’,‘*’, ‘(’, ‘)’, ‘|’,没有‘+’;错误3:转换到这一步S = 01S|01|10S|10的时候,
=(01S|01) | (10S|10)
由S=01S|01,得 S=(01)*(01)
由S=10S|10,得S=(10)*(10)
最终得正规式(01)*(01) | (01)*(01),是错误的
规则2 :A→xA|y 得A=x*y
规则3 :A→x|y (A→x A→y)得A=x|y
规则2和3都是描述“或”产生式如何转换,规则2中A递归定义,规则3不是,产生式递归定义的时候,产生式中的或关系,不能对应到正规式的或关系上
如规则2不能按规则3来转换,得A=x*x和 A=y,最终得正规式x*x|y。;从描述的语言上看:
S→ 01S|01|10S|10,以及它的正确转换(01|10)*(01|10),描述的都是01和10,任意次序,任意多个组成的串,,
而错误的转换(01)*(01) | (01)*(01),描述的是01组成的任意长的串,如010101…或者10组成的任意长的串101010…,与原文法描述的语言不等
原创力文档


文档评论(0)