第三章 词法分析与有穷自动机
《编译原理》第3章

NFA到相应的DFA的构造的基本思路是: DFA的每 一个状态对应NFA的一组状态. DFA使用它的状 态去记录在NFA读入一个输入符号后可能达到的 所有状态.
NFA M所能接受的符号串的全体记为L(M)
结论:
上一个符号串集V是正规的,当且仅当存 在一个上的不确定的有穷自动机M,使得 V=L(M)。
DFA是NFA的特例.对每个NFA N一定存在一个DFA M,使得 L(M)=L(N)。对每个NFA N存在着与之 等价的DFA M。 有一种算法,将NFA转换成接受同样语言的DFA.这 种算法称为子集法. 与某一NFA等价的DFA不唯一.
0
1
S P
Z
{P} {}
{P}
{S,Z} {Z}
{P}
• δ为S * 到S的子集(2 S)的一种映射
• 从NFA的矩阵表示中可以看出,表项通常是一状态的集合, 而在DFA的矩阵表示中,表项是一个状态
∑*上的符号串t被NFA M接受:
• 对于Σ*中的任何一个串t,若存在一条从某一初态 结点到某一终态结点的道路,且这条道路上所有 弧的标记字依序连接成的串(不理采那些标记为ε 的弧)等于t,则称t可为NFA M所识别(读出或接 受)。 • 若M的某些结点既是初态结点又是终态结点;或 者存在一条从某个初态结点到某个终态结点的道 路,其上所有弧的标记均为ε,那么空字ε可为M所 接受。
其中: δ(S,0)={P}
δ(S,1)={S,Z} δ(Z,0)={P} δ(Z,1)={P} δ(P,1)={Z} • 状态图表示
1 1 S 0 0,1 Z
P
1
• 矩阵表示
状态 输入
δ(S,0)={P} δ(S,1)={S,Z} δ(Z,0)={P} δ(Z,1)={P} δ(P,1)={Z}
编译原理第三章

例3.4 Z→ A→ B→
有正规文法G: 0A 0A | 0B 1A | ε
例3.5 A→ B→ C→
有正规文法G: aB | bB aC | a | b aB
例3.6 Z→ U→ V→
有正规文法G: Z=0(0|01)*0 U0 | V1 A=(a|b)(aa)*(a|b) Z1 | 1 Z=(10|01)(10|01)* Z0 | 0
A
B
r2 ε
A C
A
B
ε
B
r1
④R为复合正规式?
例3.12 3.13 P41
教学进度
3.4.4 NFA确定化为DFA
方法(子集法) 1、改造M为M’: ①引进新的初态结点X、终态结点Y; ②对M的状态转换图实施分裂(替换)
计算机科学与工程系
2、将M’进一步变换为DFA :
①状态子集T的闭包_CLOSURE(T) ②定义状态集Ta = _CLOSURE(J) ③从DFA的初态_CLOSURE({X})开始计算状态转换矩阵;直到 不再产生新的状态子集为止。
第三章
• • • • • •
词法分析与有穷自动机
计算机科学与工程系
词法分析器的功能与输出 单词符号的两种定义方式 正规表达式与有穷自动机 正规文法与有穷自动机 词法分析器的设计 词法分析程序自动构造工具LEX简介
教学进度
3.1 词法分析器的功能
计算机科学与工程系
词法分析:对字符串表示的源程序进行从左到右的扫描和 分解,根据语言的词法规则识别出一个个具有独立意义的 单词符号。
教学进度
3.3 单词符号的两种定义方式
单词符号结构的描述方法:
计算机科学与工程系
正规文法(3型文法)(regular grammar)
第三章 词法分析和有穷自动机

ε
ε
2
ε
6 b
ε
f
3.4.5 DFA的最小化(化简)
• 最少状态DFA 对于一个DFA M,存在一个最少状态DFA M’, 使得L(M’)=L(M)。 (a)没有多余状态 (b)没有两个状态是互相等价的 结论: 一个NFA 对应的DFA不惟一 但它对应的最小化DFA不计同构是惟一的
• 多余状态的例子 a
例
正规式 φ
ε
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组成的字}
• 例 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的表示方法 两种:矩阵和图形的方式 矩阵称为状态转换矩阵 图形称为状态转换图
• 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)
编译原理分知识点习题 词法分析与有穷自动机

1. 将图1所示的有穷自动机转换成与其等价的正规文法,其中4、5为终止状态。
解答:本题考查有穷自动机到正规文法的转换方法。
这类题只需要书中所介绍的方法进行即可得到正规文法,本题有穷自动机对应的正规文法G[S]为:A →aB|bB|cCB →aB|bD|aE|cC|b|aC →bB|cC|cE|cD →bD|bE →aE|a图1有穷自动机的状态转换图2.给定如图2所示的有穷自动机,试用正规表达式给出它能接受的语言集合。
图2有穷自动机解:本题考查正规表达式与有穷自动机的等价性。
对于一个在输入字母表∑上的FAM ,一定可以在字母表∑上构造一个正规表达式e ,使得L(e)=L(M) .根据状态转换图,从开始状态出发,可以有任意个(包括0个)b 作为句子的开始部分;从0状态出发,每输入一个a ,不许输入两个b 才能到达终止状态后,还可以通过输入a 回到状态1,或输入b 回到状态0,然后进入递归过程,再输入相同的符号串,所以,该有穷自动机描述的语言为:startab(b*(aa*b)*b)*3. 构造下述正规表达式的DFA。
Xy*|yx*y|xyx解:本题考查由正规表达式构造有穷自动机的方法,本题可按照由正规表达式构造等价的NFA,NFA确定化,DFA最小化3步进行求解。
(1)根据题中所给的正规表达式得到相应的DFA如图3所示。
图3正规表达式Xy*|yx*y|xyx的DFA。
(2)依据该NFA采用子集法构造确定DFA其过程如表1(已换名)所示。
以所有包含NFA的终止状态Z的DFA状态作为终止状态,得到DFA相应的状态转换图如图4所示图4 DFA的状态转换图(3)对DFA进行最小化,过程如下:已知K={0,1,2,3,4,5,6}。
首先将K分成两个子集K1={0,2,3} (非终态集)K2={1,3,4,6} (终态集)在状态集合K1={0,2,3}中,因为{0}x={1}⊂K2{2,4}x={4}⊂K1所以状态0与状态2,4不等价,故K1可分割为K11={0} K12={2,4}在状态集合K12={2,4}中,因为有{2,4}x={4} {2,4}y={5}⊂K2所以,状态2和状态4等价。
第三章词法分析及有穷自动机

U
④ 以识别符号为终止状态。
例:设有正规文法G[Z]: Z∷= U0|V1 U∷=Z1|1 V∷=Z0|0
(描述的语言为L(G)={01,10}+) 则状态转换图如下:
新增加开 始状态S
1 S
0
U 1
0
V
0 Z
1
以开始符号Z 作终态
例:标识符的转换图:
字 母 或 数 字
字 母
0
1
非 字 母 和 非 数 字 2
例:一种一类的单词输出形式 设保留字、标识符、常数、运算符、分界符
的种别码分别为1,2,3,4,5;将if a>1 then b:=10表示为一种一类的单词输出形式。
if a>1 then b:=10
(字符串表示 的源程序)
=>词法分析 器=>
(1, ’ if ’ )
(2,’ a ’ ) , (4,’ >’) (3,’1’ 的二进 制数)
2>根据状态转换图写词法分析程序 为每一个状态结点写一个过程或函数: 对N1结点: Procedure PN1
Begin
Ch:=getchar( );
If ch=”e” then PN5 Else if ch=”d” then PN2
Else if ch=” ·” then PN3 Else error
从开始状态出发到某一终止状态结点为止,所经过的路径 上的符号串,称能为该状态转换图所接收(识别)的符号 串。
如:标识符x26为上述转换图识别,识别路径为
x
2
6
0
1
1
1
非 字 母 和 非 数 字 2
2) 右线性正规文法构造状态转换图
① 右线性正规文法U ∷= a|aV构造状态转换图的步骤: ② 增加一个终止状态结点z(假定文法的词汇表中不含
编译原理第三章_有穷自动机

例 过河问题 分析(续)
初始状态:MWGC-φ;终止状态:φ-MWGC。 g
MWGC-φ
WC-MG
问题:
6
例 过河问题 状态转换图
起始 g
MWGC-φ g
g φ-MWGC
g
7
WC-MG
m
m MWC-G
w
w
c
C-MWG
c W-MGC
g
g
MGC-W c
MG-WC
w
m
c G-MWC
m
gg MWG-C
+dd. ddd;
输入符号串
数字 数字
SB
.
数字
+
A
H
-.
数字
.G
接收:若扫描完输入串, 且在一个终止状态上结 束。
数字 阻塞:若扫描结束但未 停止在终止状态上;或 者为能扫描完输入串 (如遇不合法符号)。
不完全描述:某些状态 对于某些输入符号不存 在转换。
练习:+34.567 .123 3.4.5
w
有穷自动机(FA)
数字系统:可以从一个状态移动到另一个状态;每次 状态转换,都上由当前状态及一组输入符号确定的;可以 输出某些离散的值集。
FA:一个状态集合;状态间的转换规则;通过读头来 扫描的一个输入符号串。
读头:从左到右扫描符号串。移动(扫描)是由状态 转换规则来决定的。
8
读头
一个FA的例子
(3)运行: 串f(,Q,且t1tt21)∈= Σf(,f(Qt1,t2t1∈), Σt2*),其中Q∈K, t1t2为输入字符
17
例3
题:试证abba可为例1的DFA M所识别(所接受)。
sun编译原理第3章词法分析与有穷自动机第4 8讲 优质课件

={a,b}*{aa,bb}{a,b}*
练习:若S=a|bb,则L((a|bb)*)=?
2019/11/24
信息学院 孙丽云
5
第3章 词法分析与有穷自动机
■正规式中运算的优先级
括号优先,* 次之,•(连接)再次之,| 最后 例:a|bc* ≌ a|(b(c*))
ab|c*d ≌ (ab)|((c*)d)
其中 U、W∈N t∈T 其中 U、W∈N t∈T
2019/11/24
信息学院 孙丽云
8
第3章 词法分析与有穷自动机
■正规文法到正规式的转换
(1)将正规文法中的每个非终结符表示成关于它的一 个正规式方程,获得一个联立方程组。 (2)依照求解规则:
若x=αx|β(或x=αx+β),则解为x=α*β; 若x=xα|β(或x=xα+β),则解为x=βα*; 以及正规式的分配律、交换律和结合律求关于文法 开始符号的正规式方程组的解. 这个解是关于该文法开始符号S的一个正规式,显然 它表示了由该正规文法所描述的语言。
信息学院 孙丽云
2
第3章 词法分析与有穷自动机
3.3 语言单词符号的两种定义方式 多数程序设计语言的单词符号都能用正规文法或正规 式来定义。
■ 正规式与正规集
设有字母表={a1,a2,…,an},在字母表上的正 规式和它所表示的正规集可用如下规则定义: (1) Φ是上的正规式,它所表示的正规集是Φ, 即空集{} (2)ε是上的正规式,它所表示的正规集是{ε} (3)ai是上的正规式,它所表示的正规集由单个符 号ai组成,即{ai}
③ (e1)*是上的一个正规式,它所表示的正规集为 L((e1)*) =L((e1))*
正规式描述了单词符号的构成规则,正规集是正规 式能描述的所有的单词的集合。
第3章 词法分析(3)

3.4 正规式与有穷自动机的等价性
1. NFA M正规式R
在消结过程中,逐步用正规式来标记弧, 规则如下:
1.对于
1
2.对于
R1
2
R2
代之为
3
1
R1 R2
3
代之为 R1 R1| R2 1 2 1 2 R2 R2 3.对于 代之为 R1R2﹡R3 R 1 R 3 1 3 1 2 3
例如:有NFA M如图3.14,求其等价的正规式R。
a,b a 3
x ε 0 b 1 a|b a|b x ε 0
aa
a
4
ε
b
y (a|b)*(aa|bb)(a|b)* x y ε 2 a,b a|b aa(a|b) * y bb(a|b) *
4
ε y x
bb
2
ε
a|b
ε
0
3.4 正规式与有穷自动机的等价性
课堂练习 求以下NFA的正规式 a a 3 a 1 2 b
第一步
a
5 6 b
b
4
b
a
a
3
a
a
s
1 2
b
5 b
4 b
6 b
z
3.4 正规式与有穷自动机的等价性
第二步
a|b s 1 2
aa bb aa|bb 5
a|b
6
z
第三步
s
第四步
(a|b)*
2
5
(a|b)*
z
s
(a|b)*(aa|bb)(a|b)*
z
课堂讲解
• 【例5.12】第72页 • 【例5.13】第73页
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2. 正规式到正规文法的转换
字母表上的正规式R到等价的正规文法G: ①令VT= ; ②令文法的开始符号S = R ; ③对形如A→ab 的规则转换为A→aB 和B→b; ④在新的文法中,将形如A→a*b 的规则进一步转换 为A→aA | b; ⑤不断利用③和④进行转换,直到每条规则的右部最 多含有一个终结符号为止。 P37-38 例3.8 R=(a|b)(aa)*(a|b) 例3.9 R=e(e|d)*
3.4.1 确定有穷自动机(DFA)
一个 DFA M是一个五元式 M=(Q, ,δ ,S,F) 其中,Q是有限状态集,是输入字符的字母表, δ是Q×Σ到Q的单值部分映射(即状态转换), δ(qi,a)=qj, S∈Q是唯一初态, F 是终态集(可空)
例3.10设DFA M=({q0,q1,q2},{a,b},f,q0,{q2})
一、 语言的单词符号 (token) 具有独立意义的最小语法单位。 关键字 标识符 常量 运算符 界符 :基本字 保留字 :表示各种名字 :常数 :+ - * / < > :, ; : ( )
3.2 单词符号及输出单词的形式
3.2.2 单词的输出形式: (单词种别,单词自身的值) 1、单词种别
单词种别编码:整数码 一符一种、一类一种
3.4 正规式与有穷自动机
有穷自动机( finite automata)(FA):具有离散 输入和输出系统的一种抽象数学模型。能够准确地 识别正规集。 DFA NFA 正规式R与FA M是等价的: (1)对任何正规式R,都存在一个FA M 使得L(M)=L(R); (2)对任何FA M,都存在一个正规式R, 使得L(R)=L(M)
3.3 单词符号的两种定义方式
单词符号结构的形式化描述方法:
正规文法(3型文法)(regular grammar)
正规式(正规表达式)(regular expression) 例:标识符的定义 id → let | id dig | id let let ( let | dig )*
3.3.1 正规式与正规集
方法和步骤:
A X R Y
r1r2 r1| r2 r1*
r1
B A C
r2
B
r1
B
① R=Φ ② R=ε ③ R=a
A
A
B
r2 ε
A C
A
B
ε
B
r1
④R为复合正规式?
例3.12 3.13 P41
3.4.4 NFA确定化为DFA
方法(子集法) 1、改造M为M’: ①引进新的初态结点X、终态结点Y; ②对M的状态转换图实施分裂(替换)
R1=R2 正规式R1与R2等价
正规式的代数性质:
恒等式 rs=sr 说明 “”是可交换的
r(st)=(rs)t “”是可结合的 r(st)=(rs)t 连接是可结合的 r(st)=rs rt (st)r=srtr r=r r=r r*=(r)* r**=r* 分配律 对连接,是单位元素 “*”和之间的关系 “*”是幂等的
例如:程序段 if (i>j) i=20; 经词法分析器处理后, 输出单词符号系列: 〈if, 〈 — 2, 〉— 〉 〈(,〈 —29 〉 ,— 〉 〈id,指向 〈10,指向 i的符号表入口的指针〉 i的符号表入口的指针〉 〈 〉, 〈 23 —, 〉— 〉 〈id,指向 〈10,指向 j的符号表人口的指针〉 j的符号表人口的指针〉 〈), 〈 — 30, 〉— 〉 〈id,指向 〈10,指向 i的符号表入口的指针〉 i的符号表入口的指针〉 〈=, 〈 — 17 〉 ,— 〉 〈con 〈 ,指向 11,指向 20的常量表入口的指针〉 20的常量表入口的指针〉 〈;, 〈 — 26, 〉— 〉
1. 正规文法到正规式的转换 ①将文法中的规则写成关于每个非终结符的正规式方程,得到一个方程组; ②依照求解规则: 若A=αA |β,则解为A= α*β; 若A=Aα |β,则解为A= βα*; 并使用正规式的代数性质,求文法开始符号的解。 例3.4 例3.5 例3.6 P36--37
例3.4 Z→ A→ B→
正规集对应的正规式练习:
1、以1开头以0结尾的二进制串;
={0,1}
2、倒数第三个符号是0的二进制串; 3、含有相继的三个0的二进制串;
4、含有相继的两个0或相继的两个1的二进制串; 5、含有奇数个1的二进制串; 6、二进制的奇数; 7、每个1都有0直接跟在后边;
8、长度能被3整除的二进制串; 9、值能被3整除的二进制串; ……
一、定义 正规表达式 1. , 2. ai 设 ={a1,a2,…,an}是字母表 正规表达式表达的语言(正规集) {}, {ai}
3.
若有 r, s
r|s
L( r ) , L(s)
L( r ) L(s)
则有 ( a )
(b)
(c)
rs
( r )*
L( r ) L(s)
( L( r ))*
ii:若s∊T,则从s出发经过任意条弧而能到达的状态s’都 属于_CLOSURE(T)。
②定义状态集Ta = _CLOSURE(J):
若状态子集T={t1,t2,…,tn},则δ(T,a)= _CLOSURE(J); 其中J=δ(t1,a)∪δ(t2,a) ∪…∪δ(tn,a)
有 限 自 动 机(NFA与DFA)
2、单词自身的值 标识符自身值的表示 常数自身值的表示
词法分析器的输出:
(单词种别,单词符号的属性值)
单词种别提供给语法分析程序使用;单词自 身的属性值提供给语义分析程序使用。 具体的分类设计以方便语法分析程序使用为 原则。关键字可分成一类,也可以一个关键 字分成一类。常数可统归一类,也可按类型 (整型、实型、布尔型等),每个类型的常 数划分成一类。
开始 偶 0偶 1 0
1 0 0 1 1 0 1 0 偶 0奇 1
奇0偶1
2
1
3
奇0奇1
解释下列有限自动机分别识别什么语言? 1 0 1 2 3 4 5 1 0 1 0 0 6 7 0 8 0 9 1 1 1 0 1
1 a
2
a
3
a a
4
a
5
3.4.2 非确定有穷自动机(NFA)
一个 NFA M是一个五元式 M=(Q, ,δ ,S,F) 它包括: 状态集合Q 输入符号集合 转换函数δ : Q ({}) P(Q) S 是非空开始状态集 F Q是接受状态集合 例3.11 P39 a 识别语言 (a|b)*ab 的NFA 开始 0 a 1 b 2
a
{0}
a
{0, 1}
使得L(M) = L(M″ )。 也就是说,每一个NFA M都可以转换成等价的 DFA M″ 。
正规式 正规文法
NFA
DFA 最小化的DFA
实现
3.4.3 由正规表达式R构造NFA
方法和步骤: ① R=Φ ② R=ε ③ R=a
X a Y X R Y
X
Y ε
X
Y
④R为复合正规式?
3.4.3 由正规表达式R构造NFA
例 设DFA M=({0,1,2, 3}, {a,b} , δ , 0,{3}) 其中 δ(0,a)=1,δ(1,a)=3 δ(2,a)=1,δ(3,a)=3 δ(0,b)=2,δ(1,b)=2 δ(2,b)=3,δ(3,b)=3
转换矩阵
a 0 1 2 3 1 3 1 3 b 2 2 3 3
状态转换图 a 0 b 1 a a 3 a
2、将M’进一步变换为DFA :
①状态子集T的闭包_CLOSURE(T) ②定义状态集Ta = _CLOSURE(J) ③从DFA的初态_CLOSURE({X})开始计算状态转换矩阵;直到 不再产生新的状态子集为止。
3、换名
例3.14 3.15 P43-44
①状态子集T的闭包_CLOSURE(T): i:若s∊T,则s属于_CLOSURE(T);
f(q0,a)=q1 f(q1,a)=q1 f(q2,a)=q2
f(q0,b)=q2 f(q1,b)=q1 f(q2,b)=q1
一个DFA可用一个状态转换矩阵表示,
行表示状态,列表示输入字符,矩阵元素表示 δ(qi,a)的值。 一个DFA也可用一个状态转换图表示。
所以,一个DFA有三种表示方法: (1)转换函数; (2)状态转换矩阵; (3)状态转换图。
有正规文法G: 0A 0A | 0B 1A | ε
例3.5 A→ B→ C→
有正规文法G: aB | bB aC | a | b aB
例3.6 Z→ U→ V→
有正规文法G: Z=0(0|01)*0 U0 | V1 A=(a|b)(aa)*(a|b) Z1 | 1 * Z=(10|01)(10|01) Z0 | 0
b
• NFA的转换表
状 态
0 1 2 输 入 符 号
a0} {2}
a
识别语言 (a|b)*ab 的NFA
开始
0 b
a
1
b
2
注意: NFA M的状态转换图中可有标记为的边。
例 识别aa*|bb*的NFA
a 1
a
开始
0
2
b
3 b 4
DFA是NFA的特例。
对于每一个NFA M存在一个DFA M″ ,
例
while (i!=j)
if (i>j) i=i-j; else j=j-i;
词法分析器
‘while’, ‘(’,‘i’,‘!=’,‘j’, ‘)’, ‘if’,‘(’,‘i’,‘>’,‘j’,‘)’, ‘i’, ‘=’ , ‘i’, ‘-’ , ‘j’, ‘;’, ‘ else’, ‘j’, ‘=’, ‘j’, ‘-’, ‘i’ , ‘;’