1 / 14

第三章 词法分析

第三章 词法分析. 第1题 构造正规式相应的 DFA:1(0|1)*101. 由正规表达式构造有穷自动机,共分三步: 由正规表达式构造转换系统( NFA) 由转换系统( NFA) 构造确定的有穷自动机 DFA DFA 的最小化. 1(0|1)*101. X. Y. ( 0|1)*. 1. 0. 1. 1. 1. X. 2. 3. 4. Y. 0|1. 1. 0. 1. 1. ε. ε. 1. 5. X. 2. 3. 4. Y. 0. 1. 0. 1. 1. ε. ε. 1. 5.

jael-warner
Télécharger la présentation

第三章 词法分析

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第三章 词法分析 第1题 构造正规式相应的DFA:1(0|1)*101 • 由正规表达式构造有穷自动机,共分三步: • 由正规表达式构造转换系统(NFA) • 由转换系统(NFA)构造确定的有穷自动机DFA • DFA的最小化

  2. 1(0|1)*101 X Y (0|1)* 1 0 1 1 1 X 2 3 4 Y 0|1 1 0 1 1 ε ε 1 5 X 2 3 4 Y 0 1 0 1 1 ε ε 1 5 X 2 3 4 Y 1 (1)构造与1(0|1)*101等价的 NFA

  3. 0 ε ε 1 0 1 1 A0 A1 A2 A3 A4 A5 1 A6 (2)将NFA转换成DFA 采用子集法,即DFA的每个状态对应NFA的一个状态集合 构造DFA的状态集C,假定C={T0,T1,…Ti}, 其中T0= ε- closure(A0), 对于任何a∈Σ Tia= ε-closure(Move(Ti,a))

  4. 0 ε ε 1 0 1 1 A0 A1 A2 A3 A4 A5 1 A6 { } {A1,A2,A3}=T1 {A2,A3 }=T2 {A2,A4,A3}=T3 {A2,A3 }=T2 {A2,A4,A3}=T3 {A2,A5,A3}=T4 {A2,A4,A3}=T3 {A2,A3 }=T2 {A2,A4,A6,A3}=T5 {A2,A5,A3}=T4 {A2,A4,A3}=T3 Ti Ti0 Ti1 {A0} T0 {A1,A2,A3} T1 {A2,A3 } T2 {A2,A3,A4} T3 {A2,A3,A5} T4 {A2,A3,A4,A6} T5

  5. Ti Ti0 Ti1 {A0} T0 0 0 1 {A1,A2,A3} T1 1 0 0 1 1 {A2,A3 } T5 T2 T0 T1 T2 T3 T4 1 {A2,A3,A4} T3 0 { } {A1,A2,A3}=T1 {A2,A3,A5} T4 {A2,A3 }=T2 {A2,A4,A3}=T3 {A2,A3,A4,A6} T5 1 {A2,A3 }=T2 {A2,A4,A3}=T3 {A2,A5,A3}=T4 {A2,A4,A3}=T3 {A2,A3 }=T2 {A2,A4,A6,A3}=T5 {A2,A5,A3}=T4 {A2,A4,A3}=T3 DFA的状态转换图

  6. 0 0 1 0 1 0 0 1 1 T0 T1 T2 T3 T4 1 T5 1 (3)化简DFA:分割法,把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 }

  7. 0 0 1 0 1 0 0 1 1 T0 T1 T2 T3 T4 1 T5 T5 1 0 0 0 1 1 0 1 1 T0 T2 T3 T4 1 在等价状态子集{T1,T2}中选状态T2做代表,消去其他状态T1,把从消去状态T1射出和射入的弧都引到代表状态T2上 得到化简后的DFA:

  8. Y ε 0 2 3 ε ε ε 1 0 1 1 ε 6 7 8 9 X 0 1 1 ε ε 4 5 ε 作业中的问题: • 只给出了NFA,没有转换成DFA,或者没有进行DFA的化简 • 按课本上的方法构造的NFA,这种方法引进的状态个数和标记为ε的边较多,给转换成DFA带来了麻烦,容易出错 与1(0|1)*101等价的NFA为:

  9. 0 1 0 1 1 5 X 3 4 Y 1 • 区分NFA和DFA: • NFA有标记为ε的边而DFA没有 • DFA中一个状态对应一个输入符,转向一个状态,而NFA中一个状态对应一个输入符,转向一个状态集合。 不是DFA

  10. 第2题 给出下述文法所对应的正则式: S → 0A | 1B A → 1S | 1 B → 0S | 0 • 将正规文法转换称正规式 • 将每条产生式改写为正规式 产生式到正则式的转换规则: • 用代入法解正规式方程组 • 最后只剩下一个开始符号定义的正则式,其中不含非终结符

  11. 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) 2. 用代入法解正规式方程组,将A、B代入S解方程组 S = 0(1S|1) | 1(0S|0) =01S|01|10S|10=(01|10)S|(01|10) 用规则2:A→xA|y 得 A=x*y S = (01|10)*(01|10)

  12. 作业中的问题 正规文法到正规式可以直接转换,不用将正规文法转换成DFA,再将DFA转换成正规式 错误1:将(01|10)*(01|10)写成= (01|10)* 错误2:将(01|10)*(01|10)写成(01|10)+,在正规式中可以出现的算符只有‘.’,‘*’, ‘(’, ‘)’, ‘|’,没有‘+’

  13. 错误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。

  14. 从描述的语言上看: S→ 01S|01|10S|10,以及它的正确转换(01|10)*(01|10),描述的都是01和10,任意次序,任意多个组成的串,如10010110…, 而错误的转换(01)*(01) | (01)*(01),描述的是01组成的任意长的串,如010101…或者10组成的任意长的串101010…,与原文法描述的语言不等

More Related