第 4 章 词法分析

129
4 4 第第第第 第第第第

Upload: macha

Post on 19-Jan-2016

75 views

Category:

Documents


7 download

DESCRIPTION

第 4 章 词法分析. 4.1 词法分析程序的设计. 词法分析器. 词法分析是任何编译程序的第一步工作,因此编译程序都有完成词法分析的程序部分,称这种程序为 词法分析器 或 扫描器 。. 词法分析器的共同特点是把每个单词转换成其内部形式,称它为 符号 或 记号 (TOKEN) 。. 词 法 分 析 器. 语 法 分 析 器. charsequence. TOKEN. 词法分析器的功能可图示如下。其 charsequence 表示字符序列。. 词 法 分 析 器. charsequence. TOKEN sequence. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 4 章 词法分析

第第 44 章章词法分析词法分析第第 44 章章

词法分析词法分析

Page 2: 第 4 章 词法分析

词法分析器词法分析器 词法分析是任何编译程序的第一步工作,因此编译程序都有完成词法分析的程序部分,称这种程序为词法分析器或扫描器。 词法分析器的共同特点是把每个单词转换成其内部形式,称它为符号或记号记号 (TOKEN) 。

4.1 词法分析程序的设计

Page 3: 第 4 章 词法分析

词法分析器的功能可图示如下。其charsequence 表示字符序列。

词法分析器

语法分析器

charsequenceTOKEN

Page 4: 第 4 章 词法分析

词法分析器

charsequence TOKENsequence

Page 5: 第 4 章 词法分析

词法分析器的设计

TOKEN 的通常结构是一个二元组 : CLASS VAL

TOKEN:

其中 CLASS 示种类部分, VAL 是值部分 TOKEN 结构的一种方法可如下图,其中 n是从 4开始的编码,且一特殊符一码。

Page 6: 第 4 章 词法分析

1标识符:

2常整数:

3实常数:

0n特殊符:

CLASS VAL NAMEL

CONSL

Page 7: 第 4 章 词法分析

单词的识别

词法分析的关键之一是如何识别单词的问题,其中最重要的是标识符的识别问题。

Page 8: 第 4 章 词法分析

4.2 4.2 单词的描述工具单词的描述工具

定义 2.1 正则表达式 设 Σ为给定字母表 ,RE 表示 Σ上正则表达式之集 ,则定义: 1.Λ,ε∈RE 2. 若 a∈Σ, 则 a∈RE 3. 若 e1,e2∈RE, 则 (e1|e2)∈RE,(e1e2)∈RE,(e1)*∈RE

Page 9: 第 4 章 词法分析

例子: Σ={a,b}

正则式 e L(e) b+ {b, bb, bbb…} b* {ε,b, bb, bbb…}

Page 10: 第 4 章 词法分析

例子:(a|b)* {a,aa,ab,aaa…}

(a|b)0 {ε}(a|b)1 {a, b }

(a|b)2 =(a|b) (a|b) {aa,ab,ba,bb}

Page 11: 第 4 章 词法分析

定义 2.2 设 e∈RE, 则定义函数 L(e)如下: L(Λ)= L(ε)= {ε} L(a)={a} L(e*)= L(e)*

L(e1|e2)= L(e1)∪L(e2) L(e1 e2)= L(e1)L(e2)

Page 12: 第 4 章 词法分析

定理 2.1 设 e1 ,e2∈RE, 则有: 1 : L(e1|e2)=L(e2|e1) 2 : L((e1|e2)|e3)=L(e1|(e2|e3)) 3 : L((e1e2)e3)=L(e1(e2e3)) 4 : L(e1(e2|e3))=L(e1e2|e1e3) 5 : L((e1|e2)e3)=L(e1e3|e2e3) 6 : L(εe1)=L(e1ε)=L(e1)

Page 13: 第 4 章 词法分析

例子: 正则式 e L(e) ab* {a,ab,abb,abbb…} ab+ {ab,abb,abbb…} a(a|b)+ {aa,ab,aaa…} a(a|b)* {a,aa,ab,aaa…}

Page 14: 第 4 章 词法分析

语法图文法正则式

→自动机→状态图→编程

a(a|b)* {a,aa,ab,aaa…}

标识符: <字母 >(< 字母 >|< 数字 >)*

Page 15: 第 4 章 词法分析

例子:Σ={a,b} L(a*)= { ε,a,aa…} L(ba*)= { b,ba,baa…} L(a|ba*)= { a,b,ba…} L(aa|bb|ab|ba)={aa,bb,ab,ba}

Page 16: 第 4 章 词法分析

例子:∑ ={a,b}

L(e)正则式 e

2.∑上所有以 a为首的字符串集a(a|b)*

1.∑上所有以 a为首后跟任意多个 (包括 0个 ) b 的字符串集

1.ab*

正则表达式所定义的集合,称为正则集。

Page 17: 第 4 章 词法分析

4.3 4.3 确定自动机确定自动机

定义 2.3 确定自动机 (DA)A 是一个五元组A=(S,∑,δ,s0,F)

自动机有穷自动机

无穷自动机确定自动机

非确定自动机

自动机应用:广泛应用在人工智能,推理逻辑等领域。

4.3.1 4.3.1 确定自动机确定自动机

Page 18: 第 4 章 词法分析

每个 DA 均可用矩阵 (状态转换矩阵 )或状态转换图来表示。

S 是状态集 {s0,s1,…,sn}(n≥1) ∑是字母表 {a1,a2,…,an}(n≥1) δ 是映射: S×∑→S, 且为单值的 s0 是初始状态, s0∈S F 是终止状态集, FS

Page 19: 第 4 章 词法分析

例子: A=(S,∑,δ,s0,F)S={s0,s1,s2 ,s3} ∑={a,b} F={s2,s3}δ(s0,a)=s1 δ(s0,b)=s2

δ(s1,b)=s1 δ(s2,a)=s3

δ(s2,b)=s0 δ(s3,a)=s2

s2_s3

s0s3_s2

s1s1

s2s1+s0

ba

Page 20: 第 4 章 词法分析

状态转换图如下:

S0

-

ab

b

b

a

S1

S3

-+

S2

a

Page 21: 第 4 章 词法分析

前一条表明自动机的推理作用,后一条表明其词法分析的作用。

如果β∈L(A), 则称 β可被 A所接受。其中→表示映射,表示推导。

定义 2.4 设 A=(S,∑,δ,s0,F)(1) s’ s’’ ,则 s’ s’’ s’ s’’ , s’’ s’’’ ,则 s’ s’’’(2) L(A)={β|s0 s’, s’∈F }

a a

a a

Page 22: 第 4 章 词法分析

例子:标识符的正则式 : 字母 (字母|数字 )*

状态转换图如下:0 1 2

开始状态

字母或数字

字母 分界符终止状态

可为每个状态设计一段处理程序,得出标识符的分析程序。

Page 23: 第 4 章 词法分析

读入字符子程序入口

是字母 N 出错处理Y

读入字符子程序

是字母 | 数字Y

N 是分界符

N

Y识别出一个标识符后的处理

出口

Page 24: 第 4 章 词法分析

例子 :FA=({s0,s1,s2,s3},(a,b),f,S0,{s3})其中映射 f为:f(s0 , a)= s1 f(s0 , b)= s2

f(s1 , a)= s3 f(s1 , b)= s2

f(s2 , a)= s1 f(s2 , b)= s3

f(s3 , a)= s3 f(s3 , b)= s3

s3s3-s3

s3s1s2

s2s3s1

s2s1+s0

ba转换矩阵

Page 25: 第 4 章 词法分析

状态转换图:S1

S2

S0+ S3 -

a

b

b a

a

b

a|b

可以识别 =aa , abaaa 等。

Page 26: 第 4 章 词法分析

4.3.2 4.3.2 非确定自动机非确定自动机

定义 2.5 NDA 一个非确定自动机 (NDA)A 是一个五元组

A=(S, ∑,δ,S0,F) S 是状态集 {s0,s1,…,sn}(n≥1) 。 ∑是字母表 {a1,a2,…,an}(n≥1) 。 δ是映射 :S×∑→S, 不要求是单值的S0 是初始状态集 (非空 ) F 是终止状态集, FS 。

Page 27: 第 4 章 词法分析

定义 2.6 设 A是一个 NDAA=(S,∑,δ,s0,F), 则定义:

L(A)={|s0 S’ , s0∈S0, S’∈F}

定义 2.7 设 A1 和 A2 是同一字母表上的自动机,如果有 L(A1)=L(A2), 则称A1 和 A2 等价。

Page 28: 第 4 章 词法分析

例子:考虑下图所示的非确定自动机。A2=(S,∑,δ,S0,F)S={0,1,2 } S0={0,1 }∑={a,b}F={1,2}δ(0,a)={0,1} δ(0,b)={2 }δ(1,a)={ } δ(1,b)={1,2}δ(2,a)={1 } δ(2,b)={2 }

Page 29: 第 4 章 词法分析

{2}{1}-2{1,2}-+1{2}{0,1}+0ba

1

0a

b

-2

a b

b-+

+

a

b

Page 30: 第 4 章 词法分析

定理 2.2 对于每一个非确定自动机 A,存在一个确定自动机 A’使得 L(A)=L(A’)

A Ba

b

C

D

Ba

b

C

D

4.3.3 NFA4.3.3 NFA 转换为等价的转换为等价的 DFADFA

Page 31: 第 4 章 词法分析

证明:构造算法如下:1. 令 A’的初始状态为 s’0=[s1

0,s20,

… s0k], 其中 s1

0,s20,…s0

k 是 A的全部初始状态。 2. 若 I=[s1,…,sm] 是 A’的一个状态, a∈∑,则定义 δ’(I,a)=Ia

δ, 其中 δ为 A的转换函数。 3. 重复步骤 2直至不出现新的状态 I为止。

Page 32: 第 4 章 词法分析

4. 若 I=[s1,s2,…sn] 是 A’的一状态,且存在一个 I使得 S是 A的终止状态,则令 I为 A’的终止状态。

Page 33: 第 4 章 词法分析

例子:考虑下图所示的非确定自动机。

由不确定自动机 A构造等价的确定自动机 A‘过程如下图所示。

Z-

abb

bb

S P+

+

Page 34: 第 4 章 词法分析

P-ZZ+PS,ZP+Sba

非确定自动机 A SPZ[P]-[SPZ]

[P]-[Z]

[SPZ][P]-[SZ][Z][P][SZ][P]+[SP]ba

确定自动机 A’

由上述表格可以得出确定自动机 A’ 。确定自动机如下图所示。

Page 35: 第 4 章 词法分析

为方便,将扩充自动机使得在边上有 ε符号。我们称这种自动极为 ε-自动机。并记为 εDA 或 εNDA 。

Z P

a

b

-SP

a

b

b

+

-

SPZ

SZa

b

b

-

Page 36: 第 4 章 词法分析

定理 2.3 对任给 εDA 均可构造一个 DA, 使得这两个自动机等价,既有 L(εDA)=L(DA)构造算法:

1. 首先找如下 ε边,其中 B 没有 ε输出边: 如果没有这样边,则转步骤 4。

A Bε

Page 37: 第 4 章 词法分析

2. 设 B 直接后继为 B1,B2,…,Bn, 且有 :

(1≤i≤n) 则作下面工作:

B Biai

A Bε2.1消除原 ε边 (节点保留 ):2.2引进新边:A Bi

ai

2.3如果 B标有“ -”,则给 A标上“ -”。2.4如果存在一条从始点到 A 点的 ε路,则给 B标上“ +”。

Page 38: 第 4 章 词法分析

3. 重复步骤 2直至不出现步骤 1所指的 ε边为止。

4. 如果还有 ε边,则肯定有 ε闭路。这时要把闭路中的点合并为一个点,边也作相应处理。

Page 39: 第 4 章 词法分析

例子:下图是从 εDA到 DA 的过程

A Ba

b

εC

D

情况一:

A Ba

b

C

D

εa

εb

Page 40: 第 4 章 词法分析

A Ba

b

C

D

a

b

A Bε

情况二:-

A B- -

A Bε

情况三:+

A B+ +

Page 41: 第 4 章 词法分析

S Aε

情况四:+

S A+

B+

ε

Page 42: 第 4 章 词法分析

情况五:

S AB

ε

a

ε

b

S A

ba

Page 43: 第 4 章 词法分析

例子:下图是从 εDA到 DA 的过程

X

Y

S Z

1

ε

0

1

1

ε1+ -

转化过程如下:

Page 44: 第 4 章 词法分析

X

YS Z

1

ε

01

1

1+- +1

-

X

YS Z

1

01

1

1+ -

- +

11

1

+ -

Page 45: 第 4 章 词法分析

确定化:

SXYZY-SXYZ

S-ZSXYZY-SXYZY

SXYY+-SXZ

10

SXYY-S

Page 46: 第 4 章 词法分析

例子:求闭包,将 εDA 转化到 DA

a

b

a+

-

bb

10

2

4

3

56 7

8910

Page 47: 第 4 章 词法分析

① 计算 ε闭包ε-closure(0)={0,1,2,4,7}// 由该状态出发经过 ε边所达到的状态。 a b +{0,1,2,4,7}

{0,1,2,4,7} a {3,8}

ε-closure({3,8})={1,2,3,4,6,7,8} a b +{0,1,2,4,7}{1,2,3,4,6,7,8}

Page 48: 第 4 章 词法分析

{0,1,2,4,7} b {5}ε-closure({5})={1,2,4,5,6,7} a b +{0,1,2,4,7}{1,2,3,4,6,7,8} {1,2,4,5,6,7}

Page 49: 第 4 章 词法分析

转化如下:T0 ={0,1,2,4,7} T1 ={1,2,3,4,6,7,8}T2 ={1,2,4,5,6,7} T3 ={1,2,4,5,6,7,9}T4 ={1,2,4,5,6,7,10}

T4T1T3

T2-T4

T2T1T2

T3T1T1

T2T1+T0

ba

② 转化为确定自动机:

Page 50: 第 4 章 词法分析

a

+ -

b

0

2

1 3 4

a

a

a

a

b

b

b

b转换后的 DA图如下:

Page 51: 第 4 章 词法分析

NFA 的确定化

例子

4

f

3

5 621i

a a aa

bb b b

Page 52: 第 4 章 词法分析

Ia Ib{i,1,2} {1,2,3} {1,2,4}{1,2,3} {1,2,3,5,6,f} {1,2,4}{1,2,4} {1,2,3} {1,2,4,5,6,f}

{1,2,3,5,6,f} {1,2,3,5,6,f} {1,2,4,6,f}

{1,2,4,5,6,f} {1,2,3,6,f} {1,2,4,5,6,f}{1,2,4,6,f} {1,2,3,6,f} {1,2,4,5,6,f}{1,2,3,6,f} {1,2,3,5,6,f} {1,2,4,6,f}

S A BA C BB A D

C C E

D F DE F DF C E

4

f

3

5 621i

a a aa

bb b b

Page 53: 第 4 章 词法分析

等价的 DFA

a

C

DB

A E

F

S b

a

a

a

a

ab

b

b

b

b

a

b

F

Page 54: 第 4 章 词法分析

总结:① 对于简单的 ε自动机,利用构

造算法消除 ε边,然后进行确定化。② 对于复杂的 ε自动机,利用 ε

闭包的算法进行处理。

Page 55: 第 4 章 词法分析

确定自动机的化简的步骤:εDA →NDA →DA →最小化 DA

去除多余状态:从自动机的开始状态出发,任何输入也不能达到的状态,或从该状态到达不了终止状态。

1 2f

e+ -3

f

e

4.3.4 确定自动机的化简

Page 56: 第 4 章 词法分析

去除等价状态:从状态 A出发,能读出某一字符串 x 而停于终态,从状态B出发也能得出同一字符串停止于终态;反之亦然。

1

2a

+ -3

b

c

Page 57: 第 4 章 词法分析

例子:简化自动机

Q11

+P

Z1,0

0

1

+

-

QPZ[P]-[QPZ]

[P][P]-[Z][QPZ][P]-[QZ][Z][P][QZ][P]+[PQ]10

Page 58: 第 4 章 词法分析

设 PQ 、 P、 QZ 、 Z、 QPZ分别为 A、B、 C、 D、 E 。则转化为一个起点得到下图:

A

1,01

-CB

1

0

0

1

+

-D E

0

1-

Page 59: 第 4 章 词法分析

去除等价状态:按终止状态和非终止状态可将其分为两部分: {A,B} ,{C,D,E} 。

{A,B} {A},{B}01

1{C,D,E} {C,E},{D} 所以 CE 等价。

Page 60: 第 4 章 词法分析

A

1,0

-CB

1

0

1

+

-D

0

1

最终得到的状态图如下:

Page 61: 第 4 章 词法分析

例子:将下图中的 DFA M最小化。

1

-a+

-

-a

a

aaa

a

b

b

b

b

b

b

b

3

5

6 4

7

2

Page 62: 第 4 章 词法分析

按终止状态和非终止状态可将其分为两部分: {1,2,3,4} , {5,6,7} 。

a{1,2,3,4} {1,2},{3,4}

{3,4} {3},{4} 。其中 1,2 等价aa

{5,6,7} {5},{6,7} 。其中 6,7 等价a

在 1,2 和 6,7 之中去除一个即可得到最小化的 DA。

Page 63: 第 4 章 词法分析

1a

+

-

-a a

a

b b

b

b

b

3

5

6 4

a

Page 64: 第 4 章 词法分析

例子:确定化和最小化下面自动机

a

1

+-b 3

5

2

4

0

a

a

a

b

b

b

b

b

a

a

Page 65: 第 4 章 词法分析

a b+-0 1 2 1 1 4 2 1 3 4 0 5 3 3 2 5 5 4

由此可知该自动机为确定自动机。 根据状态分为: {0}{1,2,3,4,5}

Page 66: 第 4 章 词法分析

{1,2,3,4,5} {1,5}{2,3,4}ba

{2,3,4} {2}{3,4}aba

{3,4} {3}{4}a

所以 1、 5 状态等价。

Page 67: 第 4 章 词法分析

a

1

+-b 32

4

0

a

a

ab

b

ba

b

最小化自动机如下图:

Page 68: 第 4 章 词法分析

例子:将下图最小化,并描述它所标识的语言。

6

b

2

+ a 3

4

1

b

c

a

b b

c-

7-

5

b

b

d

ad

Page 69: 第 4 章 词法分析

根据状态分为 {1,2,3,4,5} 和 {6,7}两组。{1,2,3,4,5} {3,4}{1,2,5}

b

所以, 1、 2 状态等价, 3、 4 状态等价, 6、 7 状态等价。

{1,2,5} {1,2}{5}

bab

Page 70: 第 4 章 词法分析

最小化结果为:

6+ a 3

5

1

a

b b

c-

db

Page 71: 第 4 章 词法分析

例子:设有正则表达式 e为 :(a|b)*(aa|bb)(a|b)*

构造确定有穷自动机 A,使 L(A)=L(e)

解:求 e 的转换系统

S 1 2(a|b)*Zaa|bb (a|b)*

+ -

Page 72: 第 4 章 词法分析

首先,利用求闭包的方法转化为确定自动机。得出如下表格 :

S 1 2

b

Za

4 3

b

aa

b6

5

b

a+ -

S 1 2

a|b

Z

aa 4 3

bb a|b-+

Page 73: 第 4 章 词法分析

{3,1,6,4,Z}{3,1,5,2,4,Z}-{3,1,5,4,Z}

{3,1,6,2,4,Z}{3,1,5,4,Z}-{3,1,6,4,Z}

{3,1,6,2,4,Z}{3,1,5,4,Z}-{3,1,6,2,4,Z}

{3,1,6,4,Z}{3,1,5,2,4,Z}-{3,1,5,2,4,Z}

{3,1,6,2,4,Z}{3,1,5}{3,1,6}

{3,1,6}{3,1,5,2,4,Z}{3,1,5}

{3,1,6}{3,1,5}+{S,3,1}

ba

Move([s,3,1],a)=(3,5)-closure(3,5)=[1,3,5]

Page 74: 第 4 章 词法分析

0

1

2

a3

b b4

5

6

b

b

b

b

ba

aa

aa

a

+

-

-

-

-

得到确定自动机如下图 :

Page 75: 第 4 章 词法分析

0

1

2

a3

b b

b

b

a

a a+

-

化简后如下图,其中 3, 4, 5, 6四个状态等价。

Page 76: 第 4 章 词法分析

4.4 4.4 自动机与正则表达式的关系自动机与正则表达式的关系定理 2.4 对于任一确定自动机 A,

存在以正则表达式 e,使得 L(A)=L(e) 。反之亦然。证明: () 设 A为给定确定自动机 ,则构造相应正则表达式的主要算法如下图。

代之以

1 2 3

1 3

Page 77: 第 4 章 词法分析

1 2

代之以 1 2|

代之以

1 2 3

1 3*

Page 78: 第 4 章 词法分析

()由给定正则表达式β构造相应自动机的主要方法是:首先构造如下扩展转换图

X W+ -

然后利用下列规则加进节点和边,直至得到 ε-自动机为止。

代之以

i k j

i j

Page 79: 第 4 章 词法分析

i j

代之以i j|

代之以

i k j

i j*

Page 80: 第 4 章 词法分析

在运用上述转换规则前引入一新结点 W,并从所有终止结点引出 ε边到 W结点,并令 w为唯一的终止结点。他显然等价于原自动机。

正则式至自动机的转换系统:即一种特殊的状态图,具有唯一的开始状态 S和唯一的终止状态 Z,没有弧引至 S ,也没有弧自 Z 引出,弧可以用 ε标记。

Page 81: 第 4 章 词法分析

S1

S2

+ Z1

X

-

-Z2+

S1

S2

+Z1

X

-

Z2

S

Z

Page 82: 第 4 章 词法分析

例子:将自动机 DA转化为正则式

2

3

14

ac

df

e+-b

-

2

3

14

ac

df

e+ -

bW

Page 83: 第 4 章 词法分析

2

3

14

a|bc

df

e+ -W

2

3

14

a|bc|d

f

e+ -W

Page 84: 第 4 章 词法分析

3

1

4

+ -W

(a|b)(d|c)*e(a|b)(d|c)*f

(a|b)(d|c)*(e|f)1

+ -W

2

3

14

(a|b)(c|d)*

f

e+ -W

Page 85: 第 4 章 词法分析

例子:考虑将前例中的正则式 : (a|b)(d|c)* (e|f) 转换化为自动机如下图:

X+ -

W(a|b)(d|c)*(e|f)

X+ -

W1 2(a|b) (d|c)* (e|f)

3 2X 1a

c

df

e+ -

bW

Page 86: 第 4 章 词法分析

3X 1a

c

df

e+ -

bW

3 2X 1a c

d f

e+ -

bW

f

e

3X 1

a c

df

e+ -

b

W

c

d

e f

Page 87: 第 4 章 词法分析

4.4 正则文法与自动机定理 3.7 3型文法的句型形如 ωX, 其中 ω∈VT

+ , X∈(VN∪VT) 。定理 3.8 3型文法与产生式的形式为 A→ωB或 C→ω型的文法等价 ,其中 ω∈VT

+ 。

Page 88: 第 4 章 词法分析

例子 : S→abS|aaB|d B→bbB|b转化: S→aS’|aR|d S’→bS R→aB B→bB’|b B’→bB

Page 89: 第 4 章 词法分析

定理 3.9 3型文法与自动机等价

自动机 A=(S , ,, s0 , F)

3型文法 G=(VN , VT , P, Z)

Page 90: 第 4 章 词法分析

转换规则: ① 文法没有表示终止的符号,需要添加一个大写字母,表示结束状态。 ② 大写字母对应自动机的状态集。 ③ 小写字母对应自动机的字母表。 ④ 文法的初始符为初始状态。 ⑤ 产生式 B→b转换为

bB -

Page 91: 第 4 章 词法分析

产生式 Z→bB转换为 b

Z B

⑥ 去掉多余状态

Page 92: 第 4 章 词法分析

例子 :设有 3型文法如下 G1:Z→aZ|bB|c B→dB|b等价自动机 A1=(S,Σ,δ,s0,F) 如下 : S= { Z,B,K } Σ= { a,b,c,d} S0= { Z} F= { K} δ(Z,a)=Z, δ(Z,b)=B, δ(Z,c)=K, δ(B,d)=B, δ(B,b)=K

Page 93: 第 4 章 词法分析

ca db

bK

BZ+

-

注意:如果给定文法可以化简应进行化简再转换。

Page 94: 第 4 章 词法分析

1.Y为非终止状态: X→aY2.Y为有输出边的终止状态 X→aY|a3.Y为无输出边的终止状态 X→a

自动机 A=(S , ,, s0 , F)

3型文法 G=(VN , VT , P, Z)

aX Y

Page 95: 第 4 章 词法分析

例子 :自动机 A2 如下图 ,求等价 3型文法

bb

b a

aa

B

M

Zb

R-

+

-

-

Page 96: 第 4 章 词法分析

等价 3型文法 G2=(VN,VT,P,S) 如下 : VN= { Z,B,M} R 是终止状态没有输出边去掉

VT= { a,b } S=Z P= { Z→aM|bB|a|b B→aB|bZ|a|b M→bM|b|a }说明 : Z→aM|a Z→bB|b

Page 97: 第 4 章 词法分析

例子 : 设有文法如下: G[S] : S→A|bB A→c B→dD D→ε 构造等价自动机。化简文法: S→c|bB B→dD B→d

Page 98: 第 4 章 词法分析

c

db

d

K

BS+

-

D

c

b

d

K

BS+

-

Page 99: 第 4 章 词法分析

例子 : 自动机如下所示 ,求与之等价的正则文法。

1 2a 3b

a+ -b

a b+1 2 2 2,3-2,3 2 2,3

Page 100: 第 4 章 词法分析

G=({A,B,C},{a,b},P,A), 其中 P为: A→aB B→bC|b C→aC|a|aB

A Ba Cb

a

+-

a

Page 101: 第 4 章 词法分析

4.6 词法分析程序的生成器

这里介绍一种以正则表达式作为输入的词法分析程序生成器,称为 LEX。

单词的描述 词法分析程序生成器

LEX 源程序 LEXCompiler

词法分析程序

Page 102: 第 4 章 词法分析

1. 一个 LEX 源程序由下面两段组成:

辅助定义 ( 可略 )转换规则段

辅助定义段形式: D1=R1

D2=R2

…… Dn=Rn

Page 103: 第 4 章 词法分析

例如:设 VT={A,B,……Z,0,1,……9}letter=A|B|……|Z

digit=0|1|……|9identifer=letter(letter|digit)*

第三个式子不能在一、二之前。

转换规则形式: P1 {A1} P2 {A2} …… …… Pn {An}

Page 104: 第 4 章 词法分析

例子:要构造具有此变换功能的词法分析器,可编写 LEX 源程序如下:辅助定义段 Letter=A|B|……|Z Digit=0|1|……|9转换规则段 IF {return 3 } THEN {return 4 } ELSE {return 5 } > {return 34}

Page 105: 第 4 章 词法分析

:= {return 38} ( {return 20} ) {return 21} + {return 24} * {return 26}letter(letter|digit)* {return,0, 标识符自身值 }digit(digit)* {return,1, 常量值 }…… ……

Page 106: 第 4 章 词法分析

2. LEX compiler 所完成的工作:(a)对于每条转换规则 Pi( 正则式 )构造 NFA 自动机。(b)引进新的开始状态,由此出发通过 m 条弧,将 m 个 NFA连成一个 NFA 。(c)运用子集法将 NFA化为 FA。例子:试利用 LEX compiler 自动生

成一个能识别无符号数 d…d.d…dESd…d的词法分析程序。

Page 107: 第 4 章 词法分析

准备提交给生成的 LEX 源程序为 辅助定义段: digit=0|1|…|9 (d) Sign=+|-|E (S)

转换规则段: dd* {A1} d*.dd* {A2} d*ESdd* {A3} d*.dd*ESdd* {A4}

Page 108: 第 4 章 词法分析

当 LEX 生成器接受上述 LEX 源程序后,它依次完成几个步骤: (a) 构造四个 Pi对应的 NFA

d d1 2A1

d d4 5A2 3●

d

Page 109: 第 4 章 词法分析

d d8 9A3 6

d

7 SE

d

d

12

15

A4 10d

11●

E

S 1413

d

d

Page 110: 第 4 章 词法分析

(b) 合并为一个 NFAd d1 2

0

d d4 53●

d

d d8 96

d

7 SE

Page 111: 第 4 章 词法分析

d

d

12

15

10d

11●

E

S 1413

d

d

(c)相应 FA开始状态 {0,1,3,6,10}用子集法。

Page 112: 第 4 章 词法分析

1515151499

141398

135,125,12

[7]7

8[4,11]

4,11

[2,3,6,10]2,3,6,10

5,12

[0,1,3,6,10]

2,3,6,10,4,11,7

IEISI.IdI

重新命名如下:

Page 113: 第 4 章 词法分析

HIJ

HIJ

IGHF

GEEFD

ECDBBDBA

IEISI.IdI

Page 114: 第 4 章 词法分析

得到状态图:

d

d

C

BA

D

E

F H

I

G

J

dE

●●

E

dd

d

E S

d

S

d

Page 115: 第 4 章 词法分析

化简自动机:{非终极符 } d{A,C,F,I}{D,G}

{A,C,F,I}.d{A}{C,F,I}

{C,F,I}dESd {C}{F,I}

所以, D和 G等价、 F 和 I等价。 同理, H和 J等价。得到化简的状态图如下:

Page 116: 第 4 章 词法分析

d

d

C

BA

D

E

F H

dE

●●

E

dd

E

S

d

Page 117: 第 4 章 词法分析

4.8 状态转换图

设计词法分析器时首先要构造状态转换图,它是一自动机即一张有向图,由一些结点和连接它们的箭弧以及弧上的字符组成。在这些结点中有一结点是初始结点,还有一个或多个终止结点。称有向图的结点为状态。

Page 118: 第 4 章 词法分析

下面以‘指数部分’为例,介绍从词法图到状态转换图的方法。‘指数部分’的词法图如下:

E

+

-

d

Page 119: 第 4 章 词法分析

首先在词法图的入口和出口处各设一结点。分别称为状态转换图的初始和终止结点。

a b

a b若有 情形而弧上没有一结点,则其弧上设一新结点:

把 改成 a a

“清除”空弧 ( 非出口弧 )

Page 120: 第 4 章 词法分析

从上图到确定状态转换图的过程如下图所示。

E

+

-

d1● ● ●●

23

4

1● ● ●●

23

4E d

d

+

-

Page 121: 第 4 章 词法分析

● ● ●●E d

d+

-

d

1● ● ●●

23

4E d

d+

-

dd

Page 122: 第 4 章 词法分析

图 (d) 的缺点是终止结点有输出边。它不能反映何时结束。为此我们要求终止结点没有输出边。当然,我们也可直接画出所需状态转换图。但最好的方法是机械的去构造它。

E d

d+

-

d

1 2 3 4

Page 123: 第 4 章 词法分析

4.9 状态转换图的实现 考虑 PASCAL 语言的子情况。具体情况如下图所示:

-WHILEWHILE-$ENDEND-$BEGINBEGIN

CONSL地址$REAL实常数CONSL地址$INT整常数NAMEL地址$ID标识符VAL 助记符 单词

65

321

Class

4

Page 124: 第 4 章 词法分析

-$PLUS+-$SEM1;-$DO DO

-$STAR*-$ASSIG:=

9

7

1110

8

-$LE<=-$LT<-$:

12

1413

其中单词的状态转换图如下图所示,l 表示字母, d表示数字。

Page 125: 第 4 章 词法分析

l,d空白l #

d#d

#

+

*

Page 126: 第 4 章 词法分析

=:

#

=<

#

;

Page 127: 第 4 章 词法分析

例子 : X1:=X1+1; Begin YY:=0.5; ZZ:=YY*X1 End; While X1<100 DO X1:=X1经词法分析后所得到的 TOKEN 序列如下 (假定 NAMEL 表和 CONSL 表序号均从 0000 开始 ):

Page 128: 第 4 章 词法分析

-$ASSIG13

0002$ID12

-$SEMI11

0001$REAL10

-$ASSIG9

0001$ID8

-$BEGIN7

-$SEMI6

0000$INT5

-$PLUS4

0000$ID3

-$ASSIG2

0000$ID1

0000$ ID26

-$ ASSIG25

0000$ID24

-$DO23

0002$INT22

-$LT21

0000$ID20

-$WHILE19

-$SEMI18

-$END17

0000$ID16

-$STAR15

0001$ID14

Page 129: 第 4 章 词法分析

同时被生成的 NAMEL 表和 CONSL 表分别如下图:

ZZ0002YY0001X10000

NAMEL 表

100的 =进制0002

0.5 的 =进制0001

1 的 =进制0000CONSL 表