第3章词法分析.docx

上传人:b****8 文档编号:10038870 上传时间:2023-02-08 格式:DOCX 页数:45 大小:31.87KB
下载 相关 举报
第3章词法分析.docx_第1页
第1页 / 共45页
第3章词法分析.docx_第2页
第2页 / 共45页
第3章词法分析.docx_第3页
第3页 / 共45页
第3章词法分析.docx_第4页
第4页 / 共45页
第3章词法分析.docx_第5页
第5页 / 共45页
点击查看更多>>
下载资源
资源描述

第3章词法分析.docx

《第3章词法分析.docx》由会员分享,可在线阅读,更多相关《第3章词法分析.docx(45页珍藏版)》请在冰豆网上搜索。

第3章词法分析.docx

第3章词法分析

第三章词法分析

知识结构:

功能

词法分析器的要求单词符号分类

词法分析单词内部形式

器的设计设计方发

词法分析器的设计状态图

词法分析器组成

正规表达式

单词描述工具正规集

词法分析器正规文法

确定有限自动机(DFA)

单词识别工具非确定有限自动机(NFA)

DFA的最小化

正规式与FA的等价转换

等价转换

正规文法与FA的等价转换

第一节对词法分析器的要求

一、词法分析器的功能

输入源程序,输出单词符号(二元式表示)。

二元式

(单词流)

源程序

(字符流)

词法分析器

输入输出

二、单词符号的分类

关键字:

是由程序语言定义的具有固定意义的标识符。

标识符:

用来表示各种名字,如变量等。

常数:

常数的类型有整型,实型等。

运算符:

算术运算符,关系运算符,逻辑运算符。

界限符:

逗号,分号等。

三、单词符号内部的表示形式

内部的单词符号TOKEN字(二元式),TOKEN字占用机器字的长度,依据信息量的多少而定。

1、TOKEN字结构

CLASS(单词种别码)

VALUE(单词符号得属性)

CLASS:

用整数表示。

VALUE:

表示单词符号的属性(符号表指针)。

2、TOKEN的作用

CLASS:

用于语法分析器对源程序结构的分析。

VALUE:

用于语义分析器对源程序具体操作的分析。

3、单词种别码划分原则

CLASS:

关键字,运算符,界限符(编译程序定义的符号)使用一字一种编码。

VALUE值省略。

VALUE:

标识符,常数(用户定义的符号),存放符号表常数表的指针。

标识符,常数每一类为一种编码。

例:

BEGINA:

=BEND;

词法分析结果:

符号表

名字属性

A

B

(BEGIN,----)

(A,K1)K1

(:

=,---)

(B,K3)K3

(END,---)

(;,---)

四、词法分析器的结构

1、一遍扫描(交互式结构)。

2、多遍扫描(独立式结构)。

第二节词法分析器的设计

一、设计步骤

1、确定词法分析器的接口关系;

2、确定单词分类和TOKEN字的结构;

3、对每一类单词构造状态转换图;

4、根据状态转换图设计算法。

二、功能描述

1、组织源程序输入;

2、按词法规则拼读单词符号,并转换成二元式;

3、删除注解行,空格和无用符号;

4、检查词法错误。

三、设计方法

1、输入(读取原文件)

原文件存储方式:

一种方式将原文件一次读入内存,另一种方式利用缓冲区技术将原文件分批读入内存。

缓冲区的设置:

输入(扫描)缓冲区,存放输入的原文件(双缓冲区)。

起点指针扫描指针

2、预处理

功能描述:

删除无用符号,出错信息的列表打印。

单词符号的识别:

⑴语句格式

①标识符不能被无效字符隔开。

②标识符与关键字,关键字与关键字之间用空格符隔开。

②标识符的个数不能超过限定的个数。

⑵单词符号的格式

①标识符,关键字的首字符必须是字母。

②常数的首字符必须是数字。

3、识别算法(P39)

标识符的识别;常数的识别;算符的识别;界符的识别。

四、状态转换图

1、状态转换图的表示形式

是一张有向图,结点代表状态(用○表示),结点间用箭弧线连接(),箭弧线上的符号,表示射出结点到达射入结点可能识别的输入符号,终态结点代表分析结束。

2

1

初态a

3

31

bc

d

⑴⊙初始状态,表示识别符号串的开始。

⑵双圈◎终态,表示识别符号串的结束。

⑶◎*表示多读入一个字符。

例1:

标识符的状态转换图

状态转换矩阵

状态

字母

数字

其它

0

1

1

1

1

2

2

0

1

21

字母其它*

字母,数字

 

例2:

标识符“AB1”的识别

2

1

0

1

1

AB1其它*

例4:

无符号数状态转换图

1

21

0

数字其它*状态转换矩阵

状态

数字

其它

0

1

1

1

2

2

数字

 

2、识别过程

从初态开始,逐步读入字符,转到下一个状态(或出错),直至终态(或不能到达终态出错)。

例3:

字符串“AB+12”的识别

23

1

0

1

AB+*

1

0

识别出单词AB,多读入一个字符+。

由另一张状态转换图识别单词符号+。

+

继续识别剩余字符12(数字):

2

1

0

1

12其它*

上述识别过程把AB+12字符串分解为三个单词符号“AB”、“+”、“12”。

3、状态转换图的实现

状态转换图非常容易用程序实现,每一个状态对应一段程序。

⑴不含回路的分叉状态结点的程序设计

J

字母

I

K

数字

L

其它符号

利用多分支语句CASE或选择语句IF...THEN...ELSE...。

⑵含回路状态结点的程序设计

J

I

其它

数字,字母

利用循环语句WHILE...DO。

⑶词法分析程序的组成

状态转换图是一种特殊的流程,它可直观清晰地描述单词符号的识别过程,只要把每一个结点加入语义动作,就构成了词法分析程序。

4、词法分析程序的组成(八个模块)

主控模块;初始化模块;判定源程序文件是否存在模块;从源程序文件中读一个字模快;拼读一个单词模块;查关键字模块;输出单词模块;错误处理模块。

第三节正规式、正规集、正规文法

一、正规式的定义

中的符号为正规式的基本符号,单个符号或由符号与运算符组成的表达式称正规式。

运算符优先级:

重复用“*”表示;

连接用“”表示或省略;

选择用“”表示。

例:

a,ab*,ab,(ab)c都是正规式。

二、正规集

由正规表达式所表示的字符串的集合称为正规集。

如正规式用V表示,正规集L(V)表示。

三、正规文法

正规文法是上下文无关文法的一种特殊情况,所有产生式的右部至多含有一个非终结符号,左线性文法,右线性文法都属于正规文法。

左线性文法:

AB

A

右线性文法:

AB

A其中:

A,BVN,V*T

四、正规式与正规集的递归定义

1、正规式与正规集的递归定义P46

⑴ε和Ф都是Σ上的正规式,正规集为{ε}和Ф。

⑵任何a∈Σ,a是上的正规式,正规集为{a}。

⑶假定U和V是上的正规式,正规集为L(U),L(V)

U∪V是正规式,正规集为L(U)∪L(V)。

UV是正规式,正规集为L(U)L(V)。

(U)*是正规式,正规集为(L(U))*。

例1:

令Σ={a,b},则

⑴正规式a|b的正规集是{a,b}。

⑵正规式(a|b)(a|b)的正规集是{aa,ab,ba,bb}。

⑶正规式a*的正规集是{ε,a,aa,aaa……}。

⑷正规式(a|b)*的正规集是{ε,a,b,aa,ab,ba,bb,aaa……}。

(a|b)*=(a*b*)*,即所有a和b的符号串集合。

⑸(a|b)*(aa|bb)(a|b)*的正规集是所有含有两个相继a或两个相继b的字符串集合。

例2:

={a,b,c……z,0,1,……9}

正规式(a|b…|z)(a|b|…z|0|1|…|9)*代表标识符。

2、正规式与正规集的等价性

若两个正规式代表的正规集相同,则认为正规式等价。

U=V,表示L(U)=L(V)

例3:

U=10*0*,L(U)={1}{0}*

V=10*,L(V)={1}{0}*

则10*0*=10*

例4:

b(ab)*=(ba)*b(ab)*≠a*b*

(a|b)*=(a*b*)*(a|b)*≠(a*|b*)

3、正规式的代数定律

(1)UV=VU交换律

(2)UVW=(UV)W结合律

(3)U(VW)=(UV)W结合律

(4)U(VW)=UVUW分配律

(5)εU=Uε=U

(6)U*=U+

(7)U**=U*

(8)U+=U*U=UU*

例1:

选择规则UV,则描述的正规集L(UV)=L(U)∪L(V)。

令U=a,V=b:

则L(UV)=L(U)∪L(V)=L(a)∪L(b)

={a}∪{b}={a,b}

例2:

连接规则UV,则描述的正规集L(UV)=L(U)L(V)。

令U=ab,V=c:

则L(UV)=L(U)L(V)=L(ab)L(c)

={a,b}{c}={ac,bc}

例3:

重复规则U*,则描述的正规集L(U*)=(L(U))*。

U*={}∪U1∪U2∪...∪Un

U=(aab)

L(U*)=(L(U))*=(L(aab))*=(L(a)∪L(ab))*

={a,ab}*

={a,ab}0∪{a,ab}1∪{a,ab}2∪

={}∪{a,ab}∪{a,ab}{a,ab}∪

={,a,ab,aa,aab,aba,abab,}

五、正规式与正规文法的转换

正规式与正规文法都有相同的表达能力,用以描述语言(单词符号)的结构,使得所描述的语言是等价的(即L(V)=L(G))。

1、正规式与正规文法的特点

正规式描述的语言结构清晰,简洁;而正规文法描述的语言于识别。

2、正规定义式

d1r1

d2r2

...

其中:

di为定义式的名字;ri是∪{d1,d2,...,di-1}构成的正规式;ri中不含有di,di+1,...。

3、正规式与正规文法的转换算法

例:

高级语言标识符的正规式

字母(字母数字)*

⑴根据正规定义式规则,给正规式分量、正规式定义名称

字母ABC

数字012

id字母(字母数字)*

⑵对定义式的子表达式定义名称

rid(字母数字)*

⑶对定义式的子表达式展开

(字母数字)*

=(字母数字)+

=(字母数字)(字母数字)*

=字母(字母数字)*数字(字母数字)*

⑷把展开式代入定义式

rid字母(字母数字)*数字(字母数字)*

⑸把rdi(字母数字)*代入定义式id、rid,将得到正规文法:

id字母rid

rid字母rid数字rid

其中:

id,ridVN;字母,数字VT。

六、正规文法与正规式的转换

建立正规文法的联立方程组,求描述同一语言的正规式。

1、右线性文法到正规式,使得L(G)=L(V)。

产生式XrXt,其中r,tVTXVN。

论断1:

方程X=rX+t,有形如X=r*t的解。

例:

文法G

SaSbAb

AaS

⑴立联立方程组

S=aS+bA+b①

A=aS②

⑵②式,代入①式

S=aS+baS+b

S=(a+ab)S+b

⑶由论断得方程解

S=(a+ab)*b

=(aab)*b

对于同一方程式采用不同的结合方式,可以得到不同形式的正规式,但是所描述的语言(正规集)是等价的。

S=aS+baS+b

=aS+(baS+b)

=a*(baS+b)

=a*baS+a*b

=(a*ba)*a*b

所以(a*ba)*a*b=(aab)*b。

2、左线性文法与正规式的转换算法

产生式XXrt,其中r,tVTXVN。

论断2:

方程X=Xr+t,有形如X=tr*的解。

例:

文法G

idid字母id数字字母

其中:

idVN;字母,数字VT。

建立方程

id=id字母+id数字+字母

=id(字母+数字)+字母

=字母(字母数字)*

3、正规文法与正规式的转换规则

⑴产生式AxB,By对应的正规式A=xy;

⑵产生式AxAy对应的正规式A=x*y;

⑶产生式Ax,Ay对应的正规式A=xy

例:

文法G

SaA,Sa

AaA,AdA,Aa,Ad

⑴根据规则⑶先有正规式

S=aAa

A=(aAdA)(ad)

⑵再将A的正规式变换为

A=(ad)A(ad)

⑶根据规则⑵将A的正规式变换为

A=(ad)*(ad)

⑷再将A式的结果代入S的正规式

S=a(ad)*(ad)a

⑸再利用正规式的代数性质得到的正规表达式为

S=a((ad)*(ad))

因为(ad)*(ad)=(ad)+,

所以S=a(ad)+a=a((ad)+)。

又因为(ad)+=(ad)*,

所以S=a(ad)*。

第四节有限自动机(FA)

有限自动机是具有离散输入和输出系统的一种数学模型,它能准确地识别正规文法所定义的语言和正规式表示的正规集,引入有限自动机这个理论,正是为词法分析程序的自动构造寻找特殊的方法。

有限自动机的分类:

⑴确定有限自动机(DFA)。

⑵非确定有限自动机(NFA)。

一、有限自动机的表示形式

⑴状态图

一个有限自动机可以用一个状态图(状态转换图)表示,即含有m个状态,n个输入符号,若f(ki,a)=kj,则从状态结点ki到状态结点kj画标记为a的弧。

弧上标记的符号表示当前识别的符号。

⑵状态表

一个有限自动机可以用一个矩阵表示,该矩阵的第一列表示状态,第一行表示输入字符,矩阵元素表示相应状态和输入字符到达的下一状态,即k行a列为f(k,a)的值。

二、有限自动机的应用

⑴翻译器

有限自动机(FAM)作为转换器将输入串变换为输出串。

M=(S,,R,,S0,F)

⑵串产生器

有限自动机(FAM)如果只有输出没有输入。

M=(S,R,,S0,F)

⑶串识别器

有限自动机(FAM)如果只有输入没有输出。

M=(S,,,S0,F)

其中:

S状态集;输入字母表;R输出字母表;状态转换函数;S0初态;F终态

三、有限自动机的工作原理

例:

有限自动机识别无符号实常数的过程

.

0

2

1

3

d.d

dd

⑴接受

从初始状态出发所识别的字符串结束时能够到达终态结点。

例:

35.67为有效字符串。

⑵阻塞(出错)

从初始状态出发所识别的字符串结束时没能到达终态结点。

例:

356.为无效字符串。

四、确定有限自动机DFA

确定有限自动机(DFAM)是一个五元组:

DFA(M)=(S,Σ,δ,s0,F),

其中:

⑴S是一个状态的有穷集—自动机所有状态的集合。

⑵是有穷字符集合,它的每一个元素为一个输入字符。

⑶δ状态转换函数δ(S,a)=S′,当现行状态为S,输入字符为a时,将转换到下一个状态S′。

S→S单值映照函数。

⑷S0S唯一的初始状态。

⑸FS终态集。

若DFAM上有m个状态,n个输入符号(中的元素有n个),则状态转换图上有m个状态结,每个状态结最多有n个射出弧线与后续的状态连接。

1

例DFAM状态矩阵表

状态

a

b

0

1

2

1

3

2

2

1

3

3

3

3

aa

0

3

baa,b

2

bb

 

该DFAM有4个状态{0,1,2,3}。

Σ={a,b}。

S0=0为初始状态。

F=3为终态。

为状态转换函数:

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

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

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

(3,a)=3,(3,b)=3

1、DFAM所识别的符号串

DFAM所识别的符号串ω:

对ω∈Σ*,若存在一条从初始状态结点到终态结点的道路,

在这条路上所有弧线标记符号连接成的符号串恰好是ω,则称ω为DFAM所识别。

上例DFAM所识别的符号串为Σ={a,b}上的含有二个相继a或二个相继b的符号串的集合。

例1:

“aab”是DFAM所能识别的符号串。

3

1

0

aab

不能被DFAM识别的符号串:

被识别的符号串不能从初始状态结点到终态结点,有下列两种情况:

⑴不能到达终态(已识别完)

例2:

“abab”不是该DFAM所能识别的符号串(上例)。

0

1

2

1

2

abab

其中:

2状态不是终态结点。

⑵某一状态射出弧线上标记与所识别的符号不同(多态性)。

例3:

给定DFAM

3

2

1

0

aba

b

“abb”不能被DFAM识别。

2、DFAM所识别的语言L(M)

DFAM所能识别的符号串的集合,称DFAM所识别的语言:

L(M)={(S0,)F,*}

例4:

L(M)={a开头的,a,b符号串}

DFAM=({1,2};{a,b},,1,{2})

1

2

aa,b

3、空字符串的识别

如果DFAM的初始状态又是终态,则空串可被DFAM识别。

例5:

2

1

aa

L(M)={,a,aa,aaa,……..}

1

例6:

a,b

L(M)={,任意的a,b符号串}

五、非确定有限自动机NFAM

1、非确定有限自动机的特性

⑴某一结点射出多条标记相同字符的弧线到达不同的结点。

11

0

aab

bb

(0,a)=0(0,a)=1两个状态(0,a)={0,1}

(0,b)=1

(1,b)=0(1,b)=1两个状态(1,b)={0,1}

⑵某一结点射出标记有ε字符的弧线。

2

1

0

a

εε

2、非确定有限自动机NFAM定义

NFA(M)=(S,Σ,δ,S0,F)

⑴S同上;

⑵Σ同上;

⑶δ是一个从S*到S的子集的映照,即δ:

S*2s;

⑷S0S为一个非空初态集;

⑸FS,为一个终态集(可空)。

3、NFAM与DFAM的区别

⑴NFAM状态转换函数具有多值性;

即δ(S,a)={S1,S2,………Sn}

⑵NFAM可以存在有ε弧;

SiSj

⑶NFAM可以有多个初态(初态集)

六、非确定有限自动机(NFAM)的识别

例M=({1,2。

3,4},{a,b,c}{},,1,{4})

1、映射函数值

(1,)={4},(2,)=,

(3,)=,(4,)=,

(1,a)={2,3},(2,a)={2},

(3,a)=,(4,a)=,

(1,b)=,(2,b)={4},

(3,b)=,(4,b)=,

(1,c)=,(2,c)=,

(3,c)={3,4},(4,c)=

2、构造对应的状态转换矩阵

字符

状态abc

1{4}{2,3}

2{2}{4}

3{3,4}

4

3、构造非确定有限自动机NFAM

a

2

ab

4

1

ac

3

c

4、非确定有限自动机NFAM识别的有效字符串

例1:

字符串“aaab”

a

4

2

ab

1

被识别的语言L(M)={anbn≥1}。

例2:

字符串“accc”

4

1

3

ac

c

被识别的语言L(M)={acnn≥1}。

所以L(M)={}{anbn≥1}{acnn≥1}。

第五节非确定有限自动机(NFAM)的确定化

一、非确定有限自动机(NFAM)确定化的目的

1、取消识别到达的状态结点;

2、合并识别相同字符到达的状态结点。

二、ε-CLOSURE(I)闭包的定义

假设I是NFAM的状态集的一个子集。

1、I的ε(ε-CLOSURE(I))定义:

⑴若SI,则Sε-CLOSURE(I);

⑵若SI,那么从S出发经过任意条弧而能到达的任何状态S都属于ε-CLOSURE(I)。

2、Ia定义:

假定I是NFAM的状态集的一个子集,a是中的一个字符,Ia的定义:

Ia=ε-CLOSURE(J)

其中:

J是所有那些可从ε-CLOSURE(I)中的某一状态出发,经过一条a弧线而到达的状态及由当前状态出发经空弧线连接到达状态的全体。

6

5

例aε

8

3

2

1

ε

εaε

7

4

若I={1},

ε_CLOSURE(I)={1,2}

Ia={5,3,4,6,2,8,7}

若I={5},

ε_CLOSURE(I)={5,6,2}

Ia={3,8}

三、NFAM的确定化

构造一个与NFA(M)等价的DFAM`:

使得L(M)=L(M`)。

1、状态转换矩阵表的形式

中有k个元素a,状态转换矩阵形式为:

IIa1Ia2…Iak

CLOSURE(s0)

⑴第一列是DFAM中的初始状态,为NFAM中的初始状态集闭包(_CLOSURE(S0));

⑵用NFAM的初始状态集(空闭包)中的每一个状态,分别构造Ia1,Ia2,…Iak的后继状态子集。

每一个状态子集均为DFAM的一个状态。

⑶对新出现的状态子集置于第一列(作为DFAM的新状态),如同步骤⑵,直至没有出现新的状态子集为止。

2、由NFAM构造DFAM`的具体步骤:

⑴求NFAM的_CLOSURE(I);

⑵求Ix的_CLOSURE(J);(X);

⑶构造DFAM`的转换矩阵;

⑷确定DFAM`的初始状态和终态;

①含有NFAM初始状态的子集为DFAM`的初始状态结点;

②含有NFAM终态的子集为DFAM`的终态结点;

③不包含NFAM初始状态、终态的子集为DFAM`的内部状态结点;

④构造确定化有限自动机DFAM`,使得L(M)=L(M`)。

四、带弧NFA的确定化

例1:

a

2

ab

4

1

3

ac

c

其中:

*={,a,b,c}

S={1,2,3,4}

S0={1}

F={4}

⑴求NFAM的_CLOSURE(I)

I=_CLOSURE

(1)

={1,4}

令S0={1,4}。

⑵求Ix的_CLOSURE(J),(X,X=a,b,c)

Ia=_CLOSURE(J)

=_CLOSURE((1,a)U(4,a))

=_CLOSURE({2,3}U)

={2,3}

令S1={2,3}。

Ib=_CLOSURE(J)

=_CLOSURE((1,b)U(4,b))

=_CLOSURE(U)

=

Ic=_CLOSURE(J)

=_CLOSURE((1,c)U(4,c))

=_CLOSURE(U)

=

同理可求出从S1出发识别某一字符能到达的后继结点。

S1={2,3}

_CLOSURE(S1,a)

=(2,a)U(3,a)={2}

令S2={2

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1