3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序...

63
1 3. 1 3. 1 词词词词词词词词词 词词词词词词词词词 词 词词词词词词词词词 词词词 词词 词 词词词词词词词词词 词词词 词词 词词词词词词词 词词词词词词词 3 . 2 3 . 2 词词词词词词词词词词 词词词词词词词词词词 DFA DFA 词词词词词 词词 词词词词词 词词 DFA DFA 词词词词词词词 词词词词词词词 3 . 3 3 . 3 词词词词词 词词词词词 词词词词词词词词词 词词 :, 词词词词词词词词词 词词 :, FA m , FA m , min( DFA m’) L(m)=L(m’) min( DFA m’) L(m)=L(m’) 3 . 4 3 . 4 词词词词词 词词词词词 词词词词词词词词词词词词 词词 :, 词词词词词词词词词词词词 词词 :, DFA DFA 词词 词词 3 3 . . 5 5 词词词词词词词词词词词词词词 词词词词词词词词词词词词词词 3 3 . . 6 6 词词词词词词词词词词词词 词词词词词词词词词词词词 LEX LEX 词词 词词

Upload: fred

Post on 12-Jan-2016

168 views

Category:

Documents


0 download

DESCRIPTION

3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它 3 . 3 有限自动机 :有限自动机的等价性, 一个 FA m ,  min( DFA m’) L(m)=L(m’) 3 . 4 正规表达式 :单词能用正规表达式描述,能用 DFA 识别 3 . 5 正规文法与有限自动机的等价性 3 . 6 词法分析程序自动构造工具 LEX 简介. 字母. 1. 数字. 字母. 字母. 3. 1. 1. 字母. 字母. 1. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

1

3. 1 3. 1 词法分析程序的设计词法分析程序的设计:词法分析器的功:词法分析器的功能,输出,把它组织成单独程序能,输出,把它组织成单独程序

3 . 2 3 . 2 词法分析器的手工构造词法分析器的手工构造:用:用 DFA DFA 能识能识别单词,构造别单词,构造 DFADFA 并用程序实现它并用程序实现它

3 . 3 3 . 3 有限自动机有限自动机:有限自动机的等价性, :有限自动机的等价性, 一个一个 FA m ,FA m , min( DFA m’) min( DFA m’) L(m)=L(m’)L(m)=L(m’)

3 . 4 3 . 4 正规表达式正规表达式:单词能用正规表达式描:单词能用正规表达式描述,能用述,能用 DFADFA 识别识别

33 . . 5 5 正规文法与有限自动机的等价性正规文法与有限自动机的等价性 33 . . 66 词法分析程序自动构造工具词法分析程序自动构造工具 LEXLEX 简介简介

Page 2: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

2

= 8 0 ;eniLL i n e = 8 0 ;== ;; 输入

0

3

1字母

字母

数字数字

数字=

4

5

6

200 1字母

1字母

1

字母

1

字母

200

=5

2000

=5

3数字

3数字

3数字

3数字

44

;6

输出1

字母

1

字母

id , ‘Line’ = , num, ‘80’ ;,

有限控制器分析结束

Page 3: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

3

3.1 3.1 词法分析程序的设计词法分析程序的设计 3.1.1 3.1.1 词法分析程序的功能 词法分析程序的功能 源程序 单词序源程序 单词序

列 列

3.1.2 3.1.2 单词的词类和属性 单词的词类和属性 (词类符号,单词的属性值)(词类符号,单词的属性值)

3.1.3 3.1.3 词法分析程序作为一个独立子程词法分析程序作为一个独立子程序(序( 11 )语法分析程序的子程序; )语法分析程序的子程序; ( ( 22 )组织成一遍扫描。)组织成一遍扫描。

词法分析器

Page 4: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

4

While i<> j do

if i> j then i:= i-j else j:=j- I

‘ while’ ‘, i’ ‘ ’ ‘, <> , j’ ‘, do’,

‘ if’ ‘, i’ ‘ ’ ‘, > , j’,‘then’, 'i', ':=’ , 'i', ’-’ , 'j',

'else', 'j', ':=', 'j', '-', ‘i'

词法分析器

Page 5: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

5

词类和属性

computator n. Calcculating machine.

程序语言单词的分类:

1 .关键字 ( 保留字或基本字 ):begin,end

2 .标识符:用来表示各种名字 3 .字面常数: 256 , 3 .14, true,‘abc’

4 . 运算符:如,+、-、 * 、 / 等等 5 .分界符:如逗号,分号,冒号等

Page 6: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

6

词法分析器的输出:

(词类编码,单词自身的属性值)词类编码提供给语法分析程序使用;单词自身的属性值提供给语义分析程序使用。具体的分类设计以方便语法分析程序使用为原则。关键字可分成一类,也可以一个关键字分成一类。常数可统归一类,也可按类型(整型、实型、布尔型等),每个类型的常数划分成一类。单词自身的属性值提供的内容,是由词法分析和语义分析的任务划分决定的。

Page 7: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

7

例如:图 3 . 1 的源程序经词法分析器〈 while —— , 〉 〈 id ,指向 j 的符号表人口的指针〉〈 relational- op , NE 〉 〈 id ,指向 j 的符号表人口的指针〉〈 do —— , 〉 〈 if ——, 〉 〈 id ,指向 i 的符号表入口的指针〉 〈 id ,指向 j 的符号表入口的指针〉

Page 8: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

8

3.1.3 把词法分析设计成一个独立程序 ( 1 )组织成一遍扫描;( 2 )作为语法分析和语义分析的子程序

词法分析

语法分析

语义分析和中间代码生成

源程序

中间代

符 号 表 管 理

错 误 的 诊 查 处 理

Page 9: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

9

332 2 词法分析器的手工构造词法分析器的手工构造

为了构造词法分析器,要研究构词法,为了构造词法分析器,要研究构词法,每种词类的结构模式以及识别它的数学每种词类的结构模式以及识别它的数学模型——有限自动机。它的模拟程序可模型——有限自动机。它的模拟程序可以作为词法分析器的控制程序。以作为词法分析器的控制程序。

332 2 11 确定的有限自动机(确定的有限自动机( DFADFA)) 332 2 22 构造识别单词的构造识别单词的 DFADFA 332 2 3 3 编写词法分析程序编写词法分析程序

Page 10: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

10

3.2.1 确定的有限自动机 DFA

(Deterministic Finite Automata)

一 . 设计一个奇偶校验器二 . DFA 的定义三 . DFA 的三种表示四 . DFA 接受的语言五 . DFA 判定 w 是否属于 L(m) 的模拟算法

结论:如果我们能构造一个 DFA M ,使得L(M) 是编译器处理的程序语言中的单词,那么模拟 DFA M 的程序将可以用作词法分析器的控制程序。

Page 11: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

11

一设计一个奇偶校验器

DFA 是由集合,序列和函数定义的数学模型,它对于上的 w ,判定是可接受的还是不可接受的。例如,设计一个 DFA m ,奇偶校验器,首先, w 是由 0 , 1 组成的字符串,因此, 1. ={0 ,1}且w 在一条输入带上。

0 1 0 1 1$

读头

Page 12: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

12

2. 状态集:它记忆已读入 w 子串的状态 ,m 是奇偶校验器,它应该记住,初始序列是奇数个 1 还是偶数个 1 。因此, m有even和 odd 两个状态 . 3 .even 为开始状态。

4 . 转换函数,( qold , ,a)=qnew

m 有 : (even ,,0)=even ( even ,1)=odd

(odd ,0)=odd ( odd ,1)=even

5. 接受状态(或终止状态)集 {odd}

若 w使 m 从初始状态出发,最后到达一个接受状态,则 w被 m 接受;否则 w被 m 拒绝。

Page 13: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

13

二 定义 3 . 1 一个确定的有限自动机 M (记 作 DFA M )是一个五无组 M=( Σ ,Q,q 0 ,F, δ),其中(a)Q是一个有限状态集合。(b) Σ 是一个字母表,它的每个元素称 为一个输入符号。(c)q 0∈Q,q 0 称为初始状态。(d)F∈Q,F称为终结状态集合。(e) δ 是一个从Q × Σ 到Q的单值映射 δ( q,a ) =q’(q , q’∈Q,a∈ Σ) 表示当前状态为 q, 输入符号为 a时,自动机将转换到下一个状态q’,q’称为q的一个后继。

Page 14: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

14

例 3 . 3 设DFA M=({a,b},{0,1,2, 3},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三 一个DFA有三种表示:( 1 )象上面,用转换函数;( 2 )转移矩阵;( 3 )状态转换图。

Page 15: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

15

a b

0 1 2

1 3 2

2 1 3

3 3 3

转移矩阵

0

1

3

2

a a

a

a

bbb

b 3

状态转换图

易存储

Page 16: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

16

四 DFA M 接受的语言

如果对所有w∈ Σ* ,以下述方式递归地扩张 δ 的定义 δ (q, ε)=q,

δ( q,wa)= δ(δ( q, w),a),

对任何a∈ Σ, q∈Q,则有

L(M)={w|w∈ Σ* ,若存在q∈F,

使 δ (q0,w)=q}

对于例 3.3的 DFA M和 w=baa,

δ(0, baa) =δ(2,aa) = δ(1,a) =3

Page 17: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

17

从状态转换图看,从初态出发,沿任一条

路径到达接受状态,这条路径上的弧上的标

记符号连接起来构成的符号串被接受。

0

1 2

3

a a a a

b

b

b

b

Page 18: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

18

五 . DFA M 判定 w∈ ?L ( M)的算法:

输入:w $

q:=q0; a:=nextchar;

WHILE a<>"$" DO BEGIN

q:=move(q,a); a:=nextchar;

END; IF q IN F THEN return (”yes")

ELSE return (”no");

Page 19: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

19

3.2.2 手工构造识别单词的 DFA m

根椐 DFA 识别单词的定义,在研究给定程序语言单词结构的基础上,能直接构造出识别它的 DFA m 。例如:对于 Pascal, 标识符:字母开始的字母数字串。 整数:非空数字串。 无符号实数(用表示数字): ( a) dd.d dE(+- ) dd (b) ddE(+- ) dd (c) dd.d d

Page 20: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

20

1

3 4

2字母

字母

数字

数字

数字

Pascal 标识符

Pascal 整数和实数

0 1 3 4 652 7

0

0

d

d

d

dd

dd

E

E +

7

*

*

*

Page 21: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

21

3.2.3 编写词法分析程序

根据画出的状态转换图(识别单词的)构造词法分析程序,每个状态对应一段程序,完成到达此状态的工作;词法分析程序的控制程序模拟状态转换图的状态转换。

在识别标识符的过程中,要拼写出来,并和保留字区别开来;在识别常数的过程中,要把它转换成机器表示以作为属性值。

Page 22: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

22

使用下面的全局变量和过程:1. Character 2. Token

3. Getchar 4. getbc

5. Concatenation

6. letter,digit

7. Reserve

8. Retract

9. buildlist

10. return

Page 23: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

23

作业: 3.2

3.3解释下面每个有限自动机识别的语言是什磨?

(a) 1 2 3 4 5

6 7 8 9

0

0 0 0

0

00

1 1

1

111

1

(b)1 2 3 4 5

a

a aaa

Page 24: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

24

( c )

0 1 2

0

0

0

11

1

3.4 给出接受下列在字母表 {0 , 1} 上的语言的 DFA:

( a ) 所有以 00 结束的串的集合;

( b) 所有具有三个 0 的串的集合。

0

Page 25: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

25

3. 3 有限自动机 FA m

3. 3. 1 非确定的 有限自动机 NFA m

一 . NFA m

二 . FA 的等价定理 三 . 例 3.3 ,用 DFA 模拟 NFA 的动作 四 . 从一个 NFA 构造 DFA 的算法3. 3. 2 确定的 有限自动机的化简 一 .何谓确定的 有限自动机的化简 二 . 等价状态的定义 三 . 确定的 有限自动机的化简方法

Page 26: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

26

一 . 非确定的有限自动机 NFA m

定义 3 . 2

非确定有限自动机M是一个五元组

M=( Σ ,Q, q 0,F, δ)

其中 Σ ,Q, q 0,F的意义和DFA的定义一样,而 δ 是一个从QX Σ {ε}∪ 到Q的子集的映射,即 δ :QXS2Q

类似D FA, NFA m 可用状态转换图表示,可定义 NFA m 接受的语言。

Page 27: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

27

二 . FA 的等价性

定理 3 . 1 对任何一个 NFA m ,都存在一个

DFA m’ ,使 L(m’)=L(m)

证明思想:用 m’ 的一个状态对应 m 的一个状 态集合,用这种方法,能从一个 NFA m

构造一个 DFA m’ ,称作子集构造法。例 3 . 2 NFAm=(0,1 , q0,q1,q0, ), 其中 (q0,,0)= q0,q1, (q0,,1)= q1

(q1,,0)= (q1,,0)= q0,q1

Page 28: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

28

q0 q0q1

0

01

1

1

{q0} q0

q0

{q1}

{q0,q1}

0 1

1

0,1

L(m)=L(m’)={0,1}+—10{0,1}*

Page 29: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

29

0 1

4

2 3

6

5

7 8 9 10

a

a

b

b b0 1

2

4

7

0,1,2 , 4,7

a 3

a 8

6

1

2

4

7

3,8,6,1,2,4,7

b 5

b 9 6

1

2

4

7

a

5,9,6,1,2,4,7b

b 5 6

1

2

4

b10

5,10,6,1,2,4,7

7

b

例 3.3 从具体例子的讨论 , 提炼出从NFA 构造 DFA 的算法。

Page 30: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

30

四 . 从 NFA 构造 DFA 的算法

1.—closure(S) 的定义和算法

从 S 中任一状态出发,仅沿弧到达的状态集合, T=S ( edge(t, )), 其中,

edge(t, a)是 NFA 中从状态 t 出发,仅沿 a弧到达的状态集合。如下计算 T: T:=S; REPEAT

T’:=T ;

T:=T’ ( edge(t, )) (tT’)

UNTIL T=T’

tT

Page 31: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

31

2. DFA 的转移函数

DFAedge(d, a)= —closure( edge(t, a))

其中, d是 NFA 的状态集, a 。

从 NFA 构造 DFA ,是对于 NFA 的所有输入 , ,用 DFA 模拟 NFA 的动作,令 t1是NFA 的初态, DFA 的初态 d1= —closure(t1) ,若,

dj= DFAedge(di, a), 那磨,从 di到 dj存在一条用 a 标识的弧。

算法 3,2 从一个 NFA 构造一个 DFA

td

Page 32: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

32

States[1] :=ε-closure({t1}); p:=1; j:=1;WHILE j<=p DO for each a Σ∈

e:=DFAedge(states[j],a); IF e=states[i] for some i<=p THEN trans[j,a]=i ELSE p: =p+1;

states[p]:=e; trans[j,a]:=p; ;

; j:=j+1;

Page 33: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

33

0 1

4

3

6

5

7 8 9 10

a

b

b b2

a

states a b

3,8,6,1,2,4,7

0,1,2,4,7 2

5,6,1,2,4,7

3

2

5,9,6,1,2,4,7

4

2 3

2

5,10,6,1,2,4,7

5

2 3

Page 34: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

34

3.3.2 确定的有限自动机的化简

一 . 何谓确定的有限自动机的化简 所谓一个 DFA m=(, Q, q0, F, ) 的化简是指寻找一个状态数比较少的 DFA m’, 使L(m)=L(m’) 。而且可以证明, 存在一个最 少状态的 DFA m’, 使 L(m)=L(m’)。

二 . 等价状态的定义 设 p,q Q ,若对任何 w * , (p,w) F 当且仅当 (q,w) F ,则称p和q是等价状态。否则,称p和 q是可区别的。

Page 35: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

35

q1

q2

q3

q4

q1

q2

q3 q6

q4 q5

q7

b

a a

a

a

a a

a

a

aa a

b

b

b

,b

bb

b

bb

b

Page 36: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

36

1. 等价状态定义了状态集合上的等价关系。因此,状态集合能被划分成等价类;2 . 两个状态 p和 q等价应满足如下条件:( a )一致性条件, p和 q 必须同时或为接受 状态或为非接受状态;( b )蔓延性条件,对于 a , ( p,a)=r, ( q,a)=s, r和 s 必须等价 ; 相反 , r和 s不等价 , p和 q不等价。

判定两个状态 p和 q不等价,只要 o 找到一个 w* , 使( p,w)F 且( q,w) F ,或者相反。 W 称为判别序列。

Page 37: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

37

三 . 方法:

构造一张表,对每一个状态对( qi,qj)( i<j )有一表项,每当发现一对状态不等价时,就放一个 x 到相应表项中。

1 . 根据一致性条件,在每一个对应于终结状态和非终结状态的表项中放上一个 x。

2 .根据蔓延性性条件,对每一个状态对( p,q),若 a,( p,a) =r,

( q,a) =s, r和 s 不等价,则( p,q )不等价。重复 2 ,直到没有新的不等价状态对出现。

Page 38: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

38

q8q7q6q5

q1 q2 q3

1

11

10

11

1

0

0

00

0

0x x

x

x

x

x

q2

q3

q5

q6

q7

q8 q1 q2 q3 q5 q6 q7

x

x

x

x

x

x

x

x

x

x x

x x

Page 39: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

39

3.4 正规表达式

用正规表达式描述单词,把它转换成识别装置 ---- 有限自动机。

3.4 .1 正规表达式与单词 一 . 正规表达式的定义 二 . 正规表达式的代数性质 三 . 正规定义式 四 . 例示,用正规定义式描述单词

3.4 .2 正规表达式与有限自动机的等价性 L( r )=L(m)

Page 40: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

40

一 . 正规表达式的定义 是字母表

正规表达式 正规表达式表达的语言 1. , {} , 2. a , a {a}

3. 若 r, s L( r ) , L(s)

则 ( a ) (r)(s) L( r ) L(s)

( b ) (r)(s) L( r ) L(s)

( c ) ( r )* ( L( r ))*

( d ) ( r ) L( r )

Page 41: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

41

注:( 1 )正规表达式描述的集合称作正规集(正规表达式的计算描述如何构造正规集)。( 2 )“ *” ,连接,“”运算左结合,优先级由高到低。

例: =A,B,…,Z,a,b,…,z,0,1,…,9

A B... Z a b... z

L( A)L( B)…L( Z) L( a) L( b)... L(z)

= A,B,…,Z,a,b,…,z

0 1 .. . 9

L(0) L(1) ... L(9)= 0,1,…,9

Page 42: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

42

( A B... Z a b... z)

(( A B... Z a b... z) (0 1 .. . 9))*

A,B,…,Z,a,b,…,z

(A,B,…,Z,a,b,…,z 0,1,…,9)* 标识符例 3.3 =a,b

(a) a b a,b

(b) (a b )(a b ) aa,ab,ba,bb

( c) a* ,a,aa,aaa,aaaa,…

(d) (a b)* (,a,b,aa,ab,ba,bb,aaa,...

(e) a ab*

Page 43: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

43

恒等式 说明 r s=s r “ ” 是可交换的 r (s t)=(r s) t “ ” 是可结合的 r(st)=(rs)t 连接是可结合的 r(s t)=rs rt(s t)r=sr tr

分配律

r=r r=r 对连接,是单位元素 r*=(r )* “ *” 和之间的关系 r**=r* “ *” 是幂等的

二 . 正规表达式的代数性质

Page 44: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

44

正闭包 r+, 表达的语言 (L( r ))+

(L( r ))+=(L( r ))1 (L( r ))2 (L( r ))3 ……

r*=r+ r+= r r*

三 . 正规定义式

给正规表达式命名,引用。 ,序列:

d1r1 d2 r2 ... dnr n

其中 di 表示不同的名子,每一个 ri 是 d1,d2,…,di-1 上的正规表达式。 正规定义式和产生式的区别。

Page 45: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

45

四 . 例示, 用正规定义式描述单词

例 3.4 Pascal 标识符和无符号实数 letter(letterdigit)*

letterA B ... Z a b ... z digit 0 1 ... 9 id letter(letterdigit)*

(digit)+(.(digit)+ )((E(+ - )(digit)+) ) digits digit(digit)* fraction digits exponent ( E(+ - )digits) num digits fraction exponent

Page 46: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

46

3.4.2 正规表达式与有限自动机的等价性

单词结构用正规表达式描述,用机械的方法(程序),把正规表达式变换成等价的有限自动机。

定理 3.2 设 r 是上一个正规表达式,则存在一个 FA m 接受 L( r ) 。反之亦然。

证 对正规表达式 r 的运算数目作归纳。设r 具有零个运算,则或 r=或 r= 或 r=a

q0 q0 q1 q0 q1a

r= r= r=a

Page 47: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

47

设结论对少于 i(i1) 个运算的正规表达式 r成立。当 r有 i 个运算时,有三种情况:

情况 1 r=r1r2 情况 2 r=r1r2 情况 3 r=r1*

有 m1=(1,Q1,q1,F!,1), m2=(2,Q2,q2,F2,2)

且 L(m1)=L( r 1), L(m2)=L(r2) ,由 m1和m2 构造 m, 使得 L(m)=L( r ). 构造方法图示如下:q0

q1 f1

f2q2

f0

m2

m1

r=r1r2

Page 48: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

48

q0

q1 f1 q2

f0

m2m1

f2

q1 f1

r=r1r2

r=r1*

上述证明方法,是对于一个正规表达式 r,构造一个 FA m,且 L(m)=L( r ) 的算法 ,但假定知道 r 的计算顺序。 正规表达式 r 的语法是上下文无关文法。

Page 49: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

49

例 3.5 构造与下列正规式

( c) r=01*1

等价的有限自动机。语法树如左下图。

*0

1

1

q0 q1

0

q2 q31

q2 q3 q5q4

1

Page 50: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

50

0 1q0 q1

q6 q71

q2 q5q4

q0 q1 q4 q2

q3

q3

q6 q7

1

1

0

q8

q5

q9

Page 51: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

51

对于上任一 NFA m ,能构造上一个正规表达式 r ,使得 L( r )=L(m)。

把转换图的概念拓广,每条弧上可以用一个正规式标记。首先,在 m 的转换图上加进 x,y 两个结。从 x 用弧连接到 m 的所有初态结点,从 m 的所有接受态结点用弧连接到 y ,从而构成一个新的 NFA m’, L(m)=L(m’)。

下面,逐步消去 NFA m’ 中的状态结点,直至剩下 x,y 为止。在消结的过程中,逐步用正规式标记弧。消结的过程是直观的,只需反复使用下面的替换规则。

Page 52: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

52

a b c a c

a c a c

a b c a c

r1

r2

r2

r2

r1

r1r3

r1r2

r1r2

r1r2*r3

替换规则

代之以

代之以

代之以

Page 53: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

53

3.5 正规文法与有限自动机 (FA) 的等价性 L(G)=L(m)

定理 3.3 对于每一个右线性正规文法或左 线性正规文法 G ,都存在一个 FA m ,使 L(m)=L(G)

证 给定右线性正规文法 G=(VT,VN,S,P), 设f VN ,令 m=(VT ,Q, S, F, ), 其中, F= f

Q= VNf, 转移函数 定义如下: (a) Aa, (A,a)=f

(b) A aA1aA2 ... aAn

(A,a)= A1,A2 ,... ,,An

Page 54: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

54

给定左线性正规文法 G=(VT, VN, S, P), 设 q0VN ,令 m=(VT ,Q, q0 ,S , ), 其中,Q= VN q0 , 转移函数 定义如下: (a) Aa, (q0,a)=A

(b) A1 A,a, A2Aa ,…, An Aa

(A,a)= A1, A2 ,... , A n

定理 3.4 对于每一个 DFA m ,都存在一个右 线性正规文法 G 和一个左线性正规文法G’ , 使 L(m)=L(G)=L(G’)。证 设 m=(, VN , S,F, ),右线性正规文法 G的构造方法如下:

Page 55: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

55

若 sF, G=(,V N ,S,P), P 的定义如下:对任何 a 及 A,B VN, 若有 (A,a)=B, 则

(a) B F, A aB

(b) B F A aaB

若 s F, S0 V N , S0 S

构造左线性正规文法, P 的定义如下:对任何 a 及 A1,A2 VN, 有 (A1,a)=A2, 则

(a) A1 是初态, A2 a

(b) A1 不是初态 , A2 A1a

Page 56: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

56

例 3.6 DFA m 右线性正规文法 G

NFA m’左线性正规文法 G ’

A

D

C

B

0,

1

11

1

0

0

0 A00B 1D

B 0D 1C

C 0 0B 1D

D 0D 1D

Page 57: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

57

A

D

C

B

0,

1

11

1

0

0

0S0C0

B 0C0

C B 1

D 1B0 C1

D0 D1

f 0

0

NFA m 左线性正规文法

Page 58: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

58

3.6 词法分析程序的自动构造工具 LEX 简介

一 . 原理

单词的结构用正规式描述

正规式 NFA DFA min DFA

二 .用 LEX建立词法分析程序的过程

LEX编译器

LEX源程序lex.1

Lex.yy.c

Page 59: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

59

C

编译器Lex.yy.c a.out

a.out输入流 单词序列

三 .lex 源程序

lex 源程序由三部分组成

Page 60: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

60

声明%%

翻译规则%%

辅助过程声明包括变量,显明常量和正规定义式。 翻译规则的形式为: p1 { 动作 1}

p2 { 动作 2}

… … p n { 动作 n}

Page 61: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

61

每个 pi 是正规定义式的名子,每个动作i 是正规定义式 pi 识别某类单词时,词法分析器应执行动作的程序段。用 C书写。

辅助过程是动作需要的,这些过程用 C书写,可以分别编译。

词法分析器返回给语法分析器一个单词 , , 把单词的属性值存放于全程变量yylval 中。

Page 62: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

62

3.5 对于下列各语言,分别写出它们的正规 表达式: (a) 字母表 {a,b,c} 上的串,其中第一个 a先于 第一个 b。 (b) 具有偶数个 a的字母表 {a,b,c} 上的串。 ( c ) {0, 1} 上的串,该串看成二进制是4 的 倍 数。 (d) {0, 1} 上不含子串 011 的串。 (e) {0, 1} 上的串,有偶数个 0 和奇数个 1 。 (f) 英文字母组成的所有符号串,且顺序 包 含五个元音字母。

Page 63: 3. 1 词法分析程序的设计 :词法分析器的功能,输出,把它组织成单独程序 3 . 2 词法分析器的手工构造 :用 DFA 能识别单词,构造 DFA 并用程序实现它

63

3.7 构造等价于下列正规表达式的 NFA (a) ab|(a|bb)a*b (b) ((a|b)*|(bb))*