编译原理03-词法分析

学习目标1.明确词法分析在编译过程所处的阶段和作用
2.理解一般的单词分类和构词规则
3. 了解有穷自动机理论


img

img

3.1 词法分析程序的设计

(1)任务

① 主要任务

逐个字符地扫描源程序,识别单词符号(终结符)。在拼单词时作词法检查。每识别出一个单词,就翻译成相应的机内表示(语法分析时的终结符)。

② 删去注解、空格、续行符等

③ 插入某些信息

为了语法分析出错处理的错误定位,要 为源程序增加行号(在列表文件中可见)。

在支持宏处理功能的源语言中,可以由 词法分析程序完成其预处理等。

(2)实现方式

①相对独立方式

img

②完全独立方式

img

(3)单词类别及其输出形式

单词可作各种分类,典型地分为5类:

①保留字:AND,BEGIN,FOR,TYPE,VAR等(个数确定,可全体编为一类,称作“一符一类”)

②标识符:用户定义的常量名、变量名、过程名(个数不确定,作为一类)

③常量:12,1997,4.14,‘A’,‘scnu’等(个数不确定,按类型分类)

④运算符 +,-,*,/, >,>=,<,<=,#等(个数确定,“一符一类”)

⑤界限符 ;,()等(个数确定,“一符一类”)

词法分析程序输出的单词符号通常用二元式 表示:(单词种别,单词自身的值)

  • 单词种别:表示单词种类,常用整数编码,它是语法分析需要的
  • 单词自身的值:是编译中其他阶段所需要的信息

3.2 正则表达式(正则式)和正则集(正则语言) (简单了解)

定义3.1 正则式和正则集

在字母表V上定义的正则式及其描述的正则 集递归地定义如下:

(1)Φ是正则式,表示空集;

(2)ε是正则式,表示{ε};

(3)每个a∈V是正则式,表示{a};

(4) 若P和Q是正则式,分别表示正则集L§和L(Q),则

① P|Q是正则式,表示L§∪L(Q) “或”

② PQ是正则式,表示L§L(Q) “联结”

③ P是正则式,表示L§   “星闭包”

④ §是正则式,表示L§

(5) 仅由有限次使用上述步骤得到的正则式, 才是V上的正则式。运算的优先次序为:* . |

img

imgimg

定义3.2 等价

对正则式P和Q,若L§=L(Q), 则P与Q等价,记为P=Q。

img

定理3.1 运算规则

对正则式P,Q,R,以下关系成立

(1) P|Q=Q|P    “或”交换律

(2) P|(Q|R)=(P|Q)|R “或”结合律

(3) P(QR)=(PQ)R   “联结”结合律

(4) P(Q|R)=PQ|PR “联结”对“或”的左分配律

(5) (Q|R)P=QP|RP “联结”对“或”的右分配律

(6) εP=Pε=P (7) ΦP=PΦ=Φ Φ|P=P|Φ=P

(2) 由正则文法构造正则式(3G->RE)

定理3.2 正则文法规则

U→a1W1|a2W2|…|anWn|b1|b2|…|bm 的等价正则式方程为其中

U=(b1+b2+…+bm)+a1W1+a2W2+…+anWn 其中Wi是正则变量

(非重点不展开)

3.3 有穷自动机(FA)

3.3.1 确定有穷自动机(DFA)

定义3.5 一个确定有限自动机(DFA)M是一个 五元组:M=(K,VT,f,S,Z) 其中

K:有穷状态集;

VT:有穷的输入字母表;

f:K×VT→K是状态转换函数,即f(W,a)=U 表示当前状态W下,输入a时,转到状态U。

S:唯一的开始状态,S∈K;

Z:终止状态集,是K的非空子集。

“确定”即f是单值函数。

1.状态转移矩阵

一个DFA可用一个矩阵表示,该矩阵的行表示 状态,列表示输入字母,矩阵元素表示f(W,a) 的值,这个矩阵称状态转移矩阵。

img

2.状态图(SG)

一个DFA也可用状态图(SG)表示,该图中的结点表示状态,若有f(W,a)=U,则从状态结点 W到状态结点U画标记为a的弧。

img

3.关于DFA的基本概念:

定理3.4 若DFA上有一条从初态到终态 的路径产生x,则x为DFA所能识别的符 号串。

注意:若初态和终态是同一状态, 则表示ε为DFA所识别。

例:试判断符号串 aab是否是DFA所能 识别的。

img

显然,不能被识别的字符串有两种情况:

(1) 读完输入串,状态 不停在终态,例aa;

(2) 在读过程中出现不 存在的映射,使自动机 无法继续动作,例ab。

定义3.7 确定有穷自动机DFA的状态转换函 数f可扩充为:

g:K×VT*→K

特别地,g(W,ε)=W 对空串,状态不变

g(W,a)= g(f(W,a),ε)=f(W,a)

即,f有定义,则f与g一致。

g(W,a1a2)=g(g(W,a1),a2)=f(f(W,a1),a2) … … … g(W,a1a2 … an)=g(g(… g(g(W,a1),a2),…),an) =f(f(… f(f(W,a1),a2),…),an)

定义3.8 若x∈VT* 且 g(S,x)∈Z,则称x为 DFA所识别的字符串。

例:输入字符串aab g(A,aab)=g(g(A,a),ab) =g(B,ab)=g(g(B,a),b) =g(C,b)=D

定义4.9 所有DFA所能识别的字符串集合称 为DFA所接受的语言,记为L(DFA)

img

img

3.3.2 非确定有穷自动机(NFA)

定义3.10 一个非确定有限自动机(NFA)M 是一个五元组M=(K,VT,f,S,Z) 其中:

K:有穷状态集;

VT:有穷的输入字母表;

f:K×VT∪{ε}→ρ(K)(K的子集)是状态转换 函数;

S:为初态集,是K的非空子集;

Z:是终态集,是K的非空子集。

“非确定”即f是多值函数,且输入可允许为ε。

NFA与DFA的主要区别是:

(1) S是初态集,初态不唯一;

(2) f是多值函数,一个结点的多条引出 弧可标同一符号,而且允许输入ε 。

类似DFA,NFA可用状态转换矩阵和状态图表示。NFA所接受的符号串以及所接受语言也是参考DFA给出的定义。

img

img(可以)

3.3.3 NFA—>DFA(确定化)

定义3.12 ε-CLOSURE(I)

设I是K的状态子集,I的ε闭包 (ε-CLOSURE(I))为:

(1)若状态P∈I,则P∈ε-CLOSURE(I);

(2)若状态P∈I,则P’∈ε-CLOSURE(I), 其中P’为由P出发,经任意条ε弧可达的K 中的状态。

例:设有NFA的状态转换图如下:

img

img

定义3.13 move(I,a)

设I是K的状态子集,状态集 合I的a弧转换(move(I,a) ),表示I中状 态经过一条a边可到达的状态的集合。而 Ia=ε-CLOSURE (move(I,a) )。

img

img

NFA—>DFA:

初态S : I =ε-CLOSURE({S})={S,3,1}

​ Ia={3,1,5} 记为 315

​ Ib={3,1,6} 记为 316

将新状态添入I,开一新行,求其Ia和Ib。如此反复,直至不再产生新的状态为止。含Z的状态均是终态。 Ia即从I中任一状态出发,经a弧(可跳过a弧之后的任意条ε弧)可达到的状态集。

img

根据上边状态转换矩阵,可以得到DFA N’的状态集合(表的最左列状态),即

K’={[S31],[315],[316],[31524Z],[31624Z] ,[3164Z],[3154Z]},

开始状态:[S31],

终止状态:[31524Z], [31624Z],[3164Z],[3154Z]

练习:NFA确定化

img

3.3.4 确定有穷自动机的化简(最小化)

最小DFA的含义:

(1) 没有多余状态 :从该自动机的开始状 态出发,任何输入串也不能到达那个状态, 或者从这个状态出发没有通路可以到达终态。

(2) 没有两个状态是互相等价(可区别)

img

在DFA中,状态2是不能到达的状态,而状态4是不能终止的状态,因此都是多余状态。

2.两个状态s和t等价的条件:

一致性——s和t同是终态或同是非终态

蔓延性——从s出发读入某个img和 从t出发读入某个a到达的状态等价。

对 于img必须 等价。

3.化简方法(分割法):

(1) 将S划分为终态集和非终态集,得S’={Z,S-Z}

(2) 递归地分割S’中的子集,使得任何两个不同子集的状态都是可区分的,而同一个子集中的状态都是等价的。

(3) S’中的每个子集合并为一个状态。 (4) 含原初态的状态为初态;含原终态的状态为终态。

例题:DFA化简

例:设有DFA M如右图所示: 划分状态集为{4}和 {0,1,2,3}

img

对于{0,1,2,3}和输入字符a和b:

f(0,a)=1 f(0,b)=2

f(1,a)=1 f(1,b)=3

f(2,a)=1 f(2,b)=2

f(3,a)=1 f(3,b)=4

只有状态3在输入为b时映像的后继状态不在{0,1,2,3}中,因此该状态集划分为{3}和{0,1,2}

对于{0,1,2}:状态1在输入为b时的后继状态不在{0,1,2}中,因此划分为{1}和{0,2} 对于{0,2}:

对于相同输入字符,该子集中每一状态映像得到的后继状态都相同,

因此不再可划分 最后划分为:{4} {3} {1} {0,2}

对于划分结果{4}, {3}, {1}, {0,2},把{0,2} 合并为一个状态,分别标记为新状态4,3,1, 0,其状态转换图如图:

img

练习:构造相应的最小的DFA

img

img

3.4 正规式和有穷自动机的等价性

定理4.7 (RE—>NFA)对于任意的正规式e, 存在一个与之相应的NFA M,使得L(M)=L(e)。

定理4.8 对于任意的NFA M ,存在一个与之 相应的正规式e,使得L(e)=L(M)。

待整理:

img

img

【学习笔记】
【实验内容】
【学习资料】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是我,Zack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值