- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 词法分析阶段的主要任务
设计词法分析程序
单词的描述工具
单词的识别系统
正规文法与正规式
有穷自动机
第三章 词法分析与有穷自动机
• 3.1 词法分析程序的功能
• 任务
从左到右扫描源程序,产生一个个单词符号。 • 通常词法分析程序作为语法分析程序的子程序
调用过程
字符串表示的 源程序
字符
词 法 分 析 器
• DFA M的矩阵表示
字符 0 1 2 3 a 1 3 1 3 b 2 2 3 3
状态
• DFA M的状态图表示
1 a 0 b 2 初态用箭头指出 终态双圈表示 b a a 3
a,b
b
3.4.1 确定有穷自动机(DFA) • Σ 上的符号串α 被 DFA M接受 从初态到某一终态结点通路上所有弧的标 记连接的字等于 α ,则称 α 可被M识别 (接受)。
例
正规式 φ
ε
a a|b ab (a|b)(a|b) a* ba* (a|b)*
正规集 φ {ε } {a} L(a|b)=L(a) ∪ L(b)={a,b} L(ab)=L(a)L(b)={ab} {aa,ab,ba,bb} { ε ,a,aa,aaa,…} {b,ba,baa,baaa,…} {所有由a和b组成的字}
例 NFA M=({S,P,F},{0,1}, f ,{S,P},{F}) 其中 f 为: f (S,0)={P} f (S,1)={S,F} f (P,1)={F} f (F,1)={P} f (F,0)={P}
1 1
0
F
1
{S,F} 1 {F} {P}
SS P 0 F
{P} 0,1
φ
P{P}
初态不惟一 后继状态不惟一
• 单词种别
• 一般用整数编码,对应五种单词,由具体的实 现系统来编码。 • 编码之后,语法分析可以对它进行识别。
• 单词自身的值
• 存放可以取到这个单词值的方法。 如: 标识符,自身值是它所在符号表的指针; 常数,自身值是其在常数表的指针; • 通过这个指针查到单词的值和属性,用于语义 分析。
• NFA M所接受字符串的集合称为NFA M所能 识别的语言,记为L(M)。 • NFA的确定化 DFA是NFA的特例
NFA M存在与之等价的DFA M’,L(M)=L(M’) 与某一NFA等价的DFA不惟一 正规式 NFA 正规文法 DFA
3.4.4 NFA 确定化
• 状态集合I的空闭包:ε -closure(I) 它是一个状态集合,包含 : ♠ I中任何状态q ♠ I中任何状态q经任意条空弧到达的任何状态 • 状态集合I的a弧转换:Ia 定义一个状态集J,J是I中所有状态经一条a 弧到达的状态的全体 Ia=ε -closure(J)
ε
ε
2
ε
6 b
ε
f
3.4.5 DFA的最小化(化简)
• 最少状态DFA 对于一个DFA M,存在一个最少状态DFA M’, 使得L(M’)=L(M)。 (a)没有多余状态 (b)没有两个状态是互相等价的 结论: 一个NFA 对应的DFA不惟一 但它对应的最小化DFA不计同构是惟一的
• 多余状态的例子 a
• ε -closure(I)例子 ε 5
a 1 a
6
ε
ε
2
a
3
ε
8
4
ε
7
I={1} , I={5}, I={1,5}
ε -closure(I)= {1,2} ε -closure(I)={5,6,2} ε -closure(I)= {1,2,5,6}
• I的a弧转换例子 ε 5
a 1 a
6
ε
ε
3.3.1 正规式与正规集
• 3 正规式等价 若两个正规式U和V所表示的正规集相同,则说 U和V等价。 记作:U=V
例 两个正规式等价
U=(a|b) U=b(ab)* U=(a|b)*
V=b|a V=(ba)*b V=(a*b*)*
3.3.1 正规式与正规集
• 4 正规式性质
设A,B和C均为正规式,则: ♣ A|B=B|A 或的交换律 ♣ A|(B|C)=(A|B)|C 或的结合律 ♣ A(BC)=(AB)C 连接的结合律 ♣ A(B|C)=AB|AC 分配律 (A|B)C=AC|BC 分配律 ε 是连接的恒等元素 ♣ ε A=A ε =A ♣ (A*)*=A* ♣ A*=AA*| ε =A|A*=(A| ε )*
语 单词符号 法 分 析 取下一个 器
单词符号
图 词法分析程序
3.2 单词符号及输出单词的形式
• 1 单词符号 程序语言中具有独立意义的最小单位。 一般分五种:
个数 不确定
关键字 标识符 常数 运算符 界符
个数 确定
3.2 单词符号及输出单词的形式
• 2 单词的机内表示 二元式: (单词种别,单词自身的值)
例 3.4 设有正规文法G[Z]: Z → 0A A → 0A|0B B → 1A| ε 求出该文法生成语言的正规式。 解得 正规文法G[Z]所生成语言的正规式是 0(0|01)*0
例3.5 设有正规文法G[A]: A → aB|bB B → aC|a|b C → aB 求该文法对应的正规式。
解得 G[A]所生成语言的正规式是: (a|b)(aa)*(a|b)
例 3.8 将R=(a|b)(aa)*(a|b)转换为正规文法。 S → (a|b)(aa)*(a|b)
解得G[S]: S → aA|bA A → aB|a|b B → aA
例 3.9 将R=l(l|d)*转换成正规文法
S → l(l|d)* 消去ε 得G[S]: S → l|lA A → l|d|lA|dA
3.3.1 正规式与正规集
• 1 正规式的递归定义 注:正规式中只包含3种运算符: 连接“•”,或“|”,闭包“*”。 优先级依次为:闭包-连接-或。 三种运算均是左结合的。
3.3.1 正规式与正规集
• 2 正规集 • 由正规式所表示的字集为这个正规式所对应的 正规集,也把它叫做正规式所定义的语言。 • 正规式U的正规集表示为L(U)。
• 例 if (a>1) b=100; 词法分析后的形式 if (2, ) ( (29, ) a (10,’a’) > (23, ) 1 (11,’1’) ) (30, ) b (10,’b’) = (17, ) 100 (11,’100’) ; (26, )
3.3 单词的两种定义方式
描述机制
• 正规文法(右线性文法和左线性文法) 机器易于识别 • 正规式 简洁清晰
a
A {1,2,4} C {1,2,4}
b
B B
A {1,2,4,5,6,f} D C {1,2,4,6,f} E
F {1,2,4,5,6,f} D F {1,2,4,5,6,f} D C {1,2,4,6,f} E
3.4.4 NFA 确定化-子集法
NFA N: i a 1 b DFA N’: a S b A b a B b D b a a 3 a 5 b a a C b b a E a F b 4 b a
3.4.2 非确定有穷自动机(NFA)
• α 被NFA M接受:从某一初态结点到某一终点 的通路上所有弧的标记连接成的字等于 α • 存在空转移的自动机一定是NFA • 如果某些结点既是初态又是终态,或 从某个初态到某个终态有空通路,则空字 ε 也 可被接受。
1
ε
2
ε
3
3.4.2 非确定有穷自动机(NFA)
• 例 DFA M=({0,1,2,3},{a,b}, f ,0,{3}) 其中 f 为: f (0,a)=1 f (0,b)=2 f (1,a)=3 f (1,b)=2 f (2,a)=1 f (2,b)=3 f (3,b)=3 f (3,a)=3
3.4.1 确定有穷自动机(DFA) • DFA的表示方法 两种:矩阵和图形的方式 矩阵称为状态转换矩阵 图形称为状态转换图
例 3.6 设有正规文法G[Z]: Z→ U0|V1 U→ Z1|1 V → Z0|0 求该文法对应的正规式。 解得 G[Z]所生成语言的正规式是: (10|01)(10|01)*
2 正规式转换到正规文法
Σ 上的正规式r转换到3)A→ab,可化为A→ aB,B →b (4)A→a*b,可化为A→ aA|b 不断应用(3),(4),直到每个产生式右部都只含有一个终结 符或 ε 为止。
解得G[S]: S → lA A → lA|dA| ε
去掉 ε 规则的算法
消去ε 规则的算法: (1)找出文法中在所有经过若干步能推出ε 的非终结符, 放入V中。 (2)按如下步骤构造新的P’: (a)若V中元素在某产生式右部,则将它变成两个产 生式:分别以ε 和它本身代入,将新生式加入P’ (b)其他产生式除去ε 也加入P’ (c)如果P中有产生式S →ε ,则引入新S’,将S’ → S|ε 加入P’
2
a
3
ε
8
4
ε
7
I={1,2}
J={5,3,4}
Ia= ε -closure(J)={2,3,4,5,6,7,8}
3.4.4 NFA 确定化-子集法
• NFA M=(Q, Σ , f ,S,Z) 转换成 DFA M’=(Q’, Σ ’ , f ’ ,S’,Z’) (1)字母表相同,令S’= ε -closure(S) (2) Q’, f ’ ,Z’ 由状态矩阵得出。
a 0 1 a 2 b 3 b a b 3 ab 1 a 2 a 5 a 6 4 0 b a b b a b 7 4 b 5
8
3.4.5 DFA的化简-分划法
• (1)首先将状态分成两个子集:终态和非终态 • (2)检查子集中的状态是否等价: 对输入字符是否落入现行的不同子集,是 的话就分化;直至没有新的分划。 • (3)最后在每个子集中选出一个代表,消去其他 等价状态。