编译原理-清华大学-第3章-词法分析(3+1)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
抽取率
S=a(a|d)*
所以,对应正规式为:a(a|d)*
17
4.3 有穷自动机
有穷自动机(也称有限自动机,FA)是识别正 规集的装置。又分为DFA,NFA
本章学习思路
正规式 构造 转换
正规文法
NFA确定化 DFA识别单词 输入串
18
一、确定的有穷自动机(DFA)
1、定义:
一个确定的有穷自动机(DFA)M是一个五元组:M=(K, Σ,f,S,Z)其中
α=aβ,a∈∑,β∈∑*,则有:
f(Q,aβ)=f(f(Q,a),β),其中Q∈K。
另外 f(Q, )=Q
24ຫໍສະໝຸດ Baidu
例:证明α=baab被如下的DFA所接受。
a
U
Sb
bV
a a,b
aQ
b
证明: f(S,baab) =f(f(S,b),aab) =f(V,aab) =f(f(V,a),ab) =f(U,ab) =f(f(U,a),b) =f(Q,b) =Q Q属于终态。得证。
20
例:
DFA M=({S,U,V,Q}, {a,b}, f, S, {Q})其中 f 定义为:
f(S,a)=U
f(V,a)=U
f(S,b)=V
f(V,b)=Q
f(U,a)=Q
f(Q,a)=Q
f(U,b)=V
f(Q,b)=Q
21
(1)DFA 的状态图表示
f(S,a)=U f(S,b)=V f(U,a)=Q f(U,b)=V
字母(字母|数字)
它表示的正规集是“字母打头的字母数字串”。 例4.3 ={d,.,e,+,-},则上的正规式 :
d(.dd )(e(+-)dd) 表示的是无符号数的集合。其中:d为0-9的数
字。
11
(二)两个正规式等价
• 若两个正规式e1和e2所表示的正规集相同, 则说e1和e2等价,写作e1=e2。
32
a 5 6
1 2 a 3 8
a 4 7 I={1}, -closure(I)={1,2};
-closure(I)=I{s’|从某 个sI出发经过任意条弧 能到达s’}
I={5}, -closure(I)={5,6,2}; move(I,a)={s’|从某
-closure({5,3,4})={5,3,4,6,2,8,7};个sI出发经过一条a
P
Z 其中
f(S,0)={P}
f(S,1)={S,Z}
f(P,1)={Z}
f(Z,0)={P}
f(Z,1)={P}
S
P
Z
0
1
{P} {S,Z}
0
{}
{Z}
0
{P}
{P}
1
0
1
P
S,Z
0
.
Z
0
P
P
1
31
三、NFA到DFA的转换
引入 状态集合I的两个运算:
• 1、状态集合I,定义I的-闭包-closure(I)为: -closure(I)=I{s’|从某个sI出发经过任意条 弧能到达s’} (包含I中的状态) 2、状态集合I的a弧转换move(I,a)定义: move(I,a)={s’|从某个sI出发经过一条a弧能到 达s’}
第三章 词法分析
• 教学要求:本章介绍编译程序的第一个阶 段词法分析的设计原理,要求掌握正规文 法、DFA、NFA、正规式和正规集的基本 概念和词法分析器的设计原理。
• 教学重点:词法分析器的任务与设计,自 动机的建立、表示、确定化及化简。
1
4.1 词法分析的任务
(1)分析和识别单词及属性, 包括识别语言的关键字、标识符、常数、运算符等;
f(V,a)=U f(V,b)=Q f(Q,a)=Q f(Q,b)=Q
a
U
a
b
a
S
a,b Q
b
V
b
22
(2)DFA 的矩阵表示
f(S,a)=U f(S,b)=V f(U,a)=Q f(U,b)=V
f(V,a)=U f(V,b)=Q f(Q,a)=Q f(Q,b)=Q
状态
字符
a
S
U
U
Q
V
U
Q
Q
b
V
0
1.K是一个有穷集,它的每个元素称为一个状态;
2.Σ是一个有穷字母表,它的每个元素称为一个输入符号, 所以也称Σ为输入符号字母表;
3.f是转换函数,是K×Σ→K上的映射,f(ki,a)=kj,(ki, kj∈K)表示:当前状态为ki,输入符为a时,将转换为下 一个状态kj,把kj称作ki的一个后继状态;
V
0
Q
0
Q
1
终态行在表的右端标以1,非终态标以0。
23
对于*中的符号串α,若存在一条从初态到某 一终态的道路,且这条路上所有弧上的符号连 接成符号串α ,则称α为DFA M所识别。若M 的初态结点同时又是终态结点,则可以为M所 识别
即:α∑*,S为DFA M的开始状态,PZ,Z为 终态集。若f(S,α)=P,则称α为DFA M所识 别。
S.P.(字符串)
词法分 析程序
取单词 单词
语法分 析程序
3
单词符号
• 单词符号一般可分为下列五种:
– 基本字(关键字):if,for,while等 – 标识符:各种名称,如常量名、变量名、过程
名等 – 常数(量):25, 3.1415, TRUE, “ABC”等 – 运算符:如 + - * / < <=等 – 界符:逗号,分号,括号等
{ab}
{aa,ab,ba,bb}
{ ,a,aa, ……任意个a的串} { ,a,b,aa,ab ……所有由a 和b组成的串} {上所有含有两个相继 的a或两个相继的b组成 的串}
10
例 ={l,d},r=l(ld)定义的正规集: {l,ll,ld,ldd,……}(标识符)
其中:l代表字母,d代表数字,正规式即是
4.S∈K是唯一的一个初态;
5.ZK是一个终态集,终态也称可接受状态或结束状态。
19
PL/0 词法状态转换图 DFA
空格
1
字母
数字
字母数字
2 非字母数字 3 数字
4 非数字
5
:
6
=
7
<
8
=
9
非= 10
>
11
=
12
非= 13 , + - ( ……
14
标识符/ 保留字 无符号整数 赋值号 小于等于号 小于号 大于等于号 大于号 其他符号
27
PL/0 词法状态转换图 DFA
空格
1
字母
数字
字母数字
2 非字母数字 3 数字
4 非数字
5
:
6
=
7
<
8
=
9
非= 10
>
11
=
12
非= 13
, + - ( …… 14
而实际程序语言的词法是 NFA
标识符/ 保留字 无符号整数 赋值号 小于等于号 小于号 大于等于号 大于号 其他符号
28
二、不确定的有穷自动机NFA
4
词法分析程序的输出形式-----二元式
(单词类别,单词的属性值)
单词类别可以用整数编码表示:一类一种或一字一种
单词类别
编码
关键字
1
标识符
2
常数
3
运算符
4
分界符
5
5
例 int x=10,y=20,sum;词法分析的结果
单词类别 1 2 4 3 5 2 4 3 5 2 5
单词的属性值 int
指向x的符号表入口指针 = 10 ,
• 例 r = a(ad)
VT={a,d} Sa(ad) SaA
A(ad)
A(ad)B
A
B(ad)B
B
G[s]: SaA
A AaB AdB
VT={a,d} VN={S,A,B}
BaB
BdB
B
15
• 2. 将正规文法转换成正规式 基本上是正规式转正规文法的逆过程 使用如下规则,直到最后只剩下一个开始符号 定义的正规式,并且右部不含非终结符。 规则1 :A→xB,B→y => A=xy 规则2: A→xA|y => A=x*y 规则3: A→x, A→y => A=x|y
25
• DFA M所能识别的符号串的全体记为L(M) 是个正规集
• 结论: 上一个字符串集V是正规的,当且仅当存在 一个上的确定有穷自动机M,使得V=L(M)。
26
DFA M=(K,Σ,f,S,Z)的单词识别算法: R:=S; c:=getchar; while c<>eof and R∈K do {R:=f(R,c); //状态转换函数,状态表 c:=getchar; }; if R is in Z then return (‘yes’) else return (‘no’)
4、仅由有限次使用上述三步骤而定义的表达式才是上的 正规式,仅由这些正规式所表示的字集才是上的正规 集。
优先级从高到底 , , ,左结合
9
例:令={a,b}, 上的正规式和相应的正规集的 例子有:
正规式 a ab ab (ab)(ab) a (ab)
(ab)(aabb)(ab)
正规集
{a}
{a,b}
1、和都是上的正规式,它们所表示的正规集分别为{} 和;
2、任何a,a是上的一个正规式,它所表示的正规集 为{a};
3、假定e1和e2都是上的正规式,它们所表示的正规集分 别为L(e1)和L(e2),那么,(e1), e1e2, e1e2, e1也都 是正规式,它们所表示的正规集分别为L(e1), L(e1)∪L(e2), L(e1)L(e2)和(L(e1))。
例如: e1= (ab), e2 = ba
又如: b(ab) = (ba)b (ab) = (ab)
12
(三)正规式的运算律
• 设r,s,t为正规式,正规式服从的代数规律有:
1、rs=sr
“或”服从交换律
2、r(st)=(rs)t “或”的可结合律
3、(rs)t=r(st)
“连接”的可结合律
4、r(st)=rsrt (st)r=srtr
指向y的符号表入口指针 = 20 ,
指向sum的符号表入口指针 ;
6
4.2 单词的描述工具
一、正规文法: 文法G=(VN,VT,P,S),P中每一产
生式的形式都为:A→aB或A→a,其中 A∈VN ,B∈VN ,a∈VT
7
几类单词正规文法的描述
• 标识符: 〈标识符〉→l | l〈字母数字〉 〈字母数字〉→l | d | l〈字母数字〉| d〈字母数字〉
29
(不确定)
例
NFA N=({S,P,Z},{0,1},f,{S,P},{Z})
其中
f(S,0)={P}
状态图表示
f(S,1)={S,Z}
f(P,1)={Z} f(Z,0)={P}
1
1S
0,1
Z
f(Z,1)={P}
0
P
1
30
表格表示
NFA N=({S,P,Z},
{0,1},f,{S,P},
S
{Z})
(2)跳过各种分隔符,如空格,回车,制表符等; (3)删除注释; (4)进行词法检查,报告所发现的错误; (5)建立符号表。
2
实现方案:基本上有两种
1.词法分析单独作为一遍
S.P.(字符串)
第一遍 词法分析
单词串 S.P.(符号串)
第二遍 语法分析
优点: 结构清晰、各遍功能单一 缺点:效率低
2.词法分析程序作为单独的子程序
move({1,2},a)={5,4,3};
弧能到达s’}
-closure(move({1,2},a)= -closure({5,3,4})
= {5,4,3,6,2,8,7};
33
• NFA→DFA的过程(子集法):
假设NFA N=(K,∑,f,K0,Kt)按如下办法构造一个DFA M,使 得L(M)=L(N).
分配律
5、r=r, r=r 是“连接”的恒等元素
6、rr=r
“或”的抽取律
rsrt =r(st) 是分配率的逆过程
srtr = (st)r 13
VN
三、正规文法到正规式
对上的正规式r ,存在一个G=(VN,VT,P,S)使得L(G)=L(r) , 反之亦然。
• 1. 将正规式转换成正规文法 令 VT= , 确定产生式和VN的元素用如下办法: (1)对正规式r,生成正规产生式 Sr, S VN (2)若x和y都是正规式 ①对形如Axy的正规产生式: AxB,By,BVN,(其中B为一个新的非终结符) ②对形如Axy的正规产生式: AxB,Ay,BxB,By,BVN ③对形如Axy的正规产生式: Ax,Ay 不断应用上述规则做变换,直到每个产生式右端只含一个1V4 T
16
例如:文法G[S]为: S->aA, S->a, A->aA, A->dA, A->a, A->d
S=aA|a
规则3
A=(aA|dA)|(a|d)
规则3
A=(a|d)A|(a|d)
抽取率
A=(a|d)*(a|d)=(a|d)+
规则2
A代入S得:S=a(a|d)+|a 规则1
S=a((a|d)+|ε)
• 无符号整数: 〈无符号整数〉→d | d〈无符号整数〉
• 运算符: 〈运算符〉→ + | - | * | / | = | <=| >=……
• 界符: 〈界符〉→ , | ; | ( | ) |……
8
二、正规式
(一)定义(正规式和它所表示的正规集):
设字母表为,辅助字母表'={,,,,,(,)}。
• 定义
N={K,∑,f,S,Z},其中K为状态的有穷非 空集, ∑为有穷输入字母表,f为K∑* 到K的 子集的映射,SK是初始状态集,ZK为终止 状态集。
与DFA的区别:
– 有可能不止一个初态 – 状态节点射出的弧用∑* 中的一个串做标记,可能不是字 母,也有可能是 – 状态节点可能射出相同标记的多个弧到多个后继状态