[计算机软件及应用]编译原理cmpl_03.ppt

[计算机软件及应用]编译原理cmpl_03

第三章 词法分析 第三章 词法分析 词法分析器作为一个独立子程序 词法分析器的设计 单词符号的识别:超前搜索 状态转换图的实现 §3.3.1 正规式与正规集 【例】 §3.4.1 确定有穷自动机(DFA) 状态转换矩阵、状态转换图 §3.4.2 非确定有限自动机(NFA) 练习: 将下列正规文法转换为正规式,再转换为NFA A?aB|bB B?aC|a|b C?aB 将下列正规式转换为左线性正规文法和NFA (a|b)(aa)*(a|b) 0(0|01)*0 状态转换图的实现 **** 词法分析器的自动产生 3.4.1 语言LEX的一般描述 3.4.2超前搜索 3.4.3 LEX的实现 §3.5.3 左线性正规文法到有穷自动机的转换方法 设给定一个左线性正规文法 G=(VN,VT,P,S),则相应的有穷自动机 M=(Q,?,f,q0,Z) (1)将VN中的每一个非终结符视作 M 中的一个状态, 并增加一个初始状态 q0,且 q0?VN, 令 Q=VN?{q0},Z={S},?=VT (将文法G的开始符号S看成终态) (2)对 A?Ba(A,B?VN,a?VT ?{?})令f(B,a)=A。 构造弧 (3)对 A?a(A?VN,a?VT ?{?}),令f(q0,a)=A。 构造弧 这样构造的 M 是具有一个开始符号的 NFA,这个 NFA 能够且只能识别正规文法 G 所描述的语言。 B A a q0 A a 【例3.20】构造下述 G[A]的有穷自动机 A?A1|B1 B?B0|0 等价的自动机 M=({S,A,B},{0,1},f,S,{A}) f(S,0)=B f(S,1)=? f(B,0)=B f(B,1)=A f(A,0)=? f(A,1)=A A B 0 1 S 0 1 这是一个确定的自动机,它识别的语言就是文法 G[A]所描述的语言,即 L(G[A])=L(M)=00*11* §3.5.3 有穷自动机到正规文法的转换方法 设给定有穷自动机 M=(Q,?,f,q0,Z),按照下述方法可以从 M 构造出相应的正规文法 G=(VN,VT,P,S), 使得L(M)=L(G) (1)令 VN=Q,VT=?,S=q0 (2)若f(A,a)=B且B?Z时, 则将规则 A?aB 加到P中。 (3)若f(A,a)=B且B?Z时,则将规则 A?aB?a 或 A?aB, B?ε 加到P中。 (4)若文法的开始符号 S 是一个终态,则将规则 S?ε 加到P中。 A B a 【例3.21】设有穷自动机 M=({S,A},{a,b,0,1},f,S,{A}) f(S,a)=A f(S,b)=A f(A,a)=A f(A,b)=A f(A,0)=A f(A,1)=A 根据转换规则,与 M 等价的正规文法 G 为 G=({S,A},{a,b,0,1},P,S) 其中 P: S?aA|bA, A?0A|1A|aA|bA|? 或 S?aA|bA|a|b, A?0A|1A|aA|bA|0|1|a|b A a S a b b 0 1 自动机 M 所识别的语言 L(M)=L(G)=(a|b)(0|1|a|b)* 【例3.22】DFA M=({A,B,C,D},{0,1},?,A,{B}) ?(A,0)=B ?(B,0)=D ?(C,0)=B ?(D,0)=D ?(A,1)=D ?(B,1)=C ?(C,1)=D ?(D,1)=D 构造一个右线性文法G,使得L(G)=L(M) 根据转换规则,等价的右线性正规文法 G 为G=({A,B,C},{0,1},P,A) 其中P: A?0B|0 B?1C C?0B|0 或 A?0B B?1C|? C?0B 自动机所识别的语言 0(10)* D C B 0 0,1 1 1 0 A 0 1 C B 1 0 A 0 化简后的DFA M’ §3.4.4 NFA 确定化为 DFA 的方法 NFA 的确定化是指对任给的 NFA,都能相应地构造一 DFA,使它们接受相同的语言。 对于一个 NFA,由于状态转换函数 f 是一个多值函数,因此总存在一些状态 q,对于它们有 f(q,a)={q1, q2,…,qn} 它是 NFA 状态集合的一个子集,为了将 NFA 转换为 DFA,把状态集合{q1, q2,…,qn}看做一个状态 A,也就是说,从 NFA 构造 DFA的基本思想是 DFA 的每一个状态代表 NFA 状态集合的某个子集,这个 DFA 使用它的状态去记录在 NFA 读入输入符号之后可能到达的所有状态的集合,我们称此构造方法为子集法。 状态集合 I 的 ?-闭包 设 I 是 NFA N 的一个状态子集, ?-CLOSURE(I)定义如下: 若 s ? I,则

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档