1 / 129

第 4 章 词法分析

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

macha
Download Presentation

第 4 章 词法分析

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第4章 词法分析

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

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

  4. 法 分 析 器 charsequence TOKENsequence

  5. CLASS VAL TOKEN: 词法分析器的设计 TOKEN的通常结构是一个二元组: 其中CLASS示种类部分,VAL是值部分 TOKEN结构的一种方法可如下图,其中n是从4开始的编码,且一特殊符一码。

  6. CLASS VAL NAMEL 标识符: 1 常整数: 2 CONSL 实常数: 3 特殊符: n 0

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

  8. 4.2 单词的描述工具 定义2.1正则表达式 设Σ为给定字母表,RE表示Σ上正则表达式之集,则定义: 1.Λ,ε∈RE 2.若a∈Σ,则a∈RE 3.若e1,e2∈RE,则(e1|e2)∈RE,(e1e2)∈RE,(e1)*∈RE

  9. 例子: Σ={a,b} 正则式e L(e) b+ {b, bb, bbb…} b* {ε,b, bb, bbb…}

  10. 例子: (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}

  11. 定义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)

  12. 定理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)

  13. 例子: 正则式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…}

  14. a(a|b)* {a,aa,ab,aaa…} 标识符:<字母>(<字母>|<数字>)* 语法图 文法 正则式 →自动机→状态图→编程

  15. 例子:Σ={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}

  16. 正则式e L(e) 1.ab* 1.∑上所有以a为首后跟任意多个(包括0个) b的字符串集 a(a|b)* 2.∑上所有以a为首的字符串集 例子:∑={a,b} 正则表达式所定义的集合,称为正则集。

  17. 4.3 确定自动机 4.3.1 确定自动机 自动机应用:广泛应用在人工智能,推理逻辑等领域。 无穷自动机 自动机 确定自动机 有穷自动机 非确定自动机 定义2.3确定自动机(DA)A是一个五元组 A=(S,∑,δ,s0,F)

  18. S 是状态集{s0,s1,…,sn}(n≥1) • ∑是字母表{a1,a2,…,an}(n≥1) • δ是映射:S×∑→S,且为单值的 • s0是初始状态,s0∈S • F 是终止状态集,FS 每个DA均可用矩阵(状态转换矩阵)或状态转换图来表示。

  19. a b +s0 s1 s2 s1 s1 _s2 s3 s0 _s3 s2 例子: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

  20. b S1 a - + S3 S0 b a a b S2 - 状态转换图如下:

  21. 定义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 前一条表明自动机的推理作用,后一条表明其词法分析的作用。 如果β∈L(A),则称β可被A所接受。其中→表示映射,表示推导。

  22. 终止状态 开始状态 分界符 字母 0 1 2 字母或数字 例子:标识符的正则式: 字母(字母|数字)* 状态转换图如下: 可为每个状态设计一段处理程序,得出标识符的分析程序。

  23. 读入字符子程序 入口 N 是字母 Y N Y N 是字母|数字 出口 识别出一个标 识符后的处理 Y 是分界符 出错处理 读入字符子程序

  24. 转换矩阵 a b +s0 s1 s2 s1 s3 s2 s2 s1 s3 -s3 s3 s3 例子: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

  25. a|b S1 a a b a + S0 - S3 b b S2 状态转换图: 可以识别=aa,abaaa等。

  26. 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 是终止状态集,FS。

  27. L(A)={|s0 S’ , s0∈S0, S’∈F}  定义2.6设A是一个NDAA=(S,∑,δ,s0,F),则定义: 定义2.7设A1和A2是同一字母表上的自动机,如果有L(A1)=L(A2),则称A1和A2等价。

  28. 例子:考虑下图所示的非确定自动机。 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 }

  29. a b +0 {0,1} {2} -+1 {1,2} -2 {1} {2} b -+ 1 a b a a b 0 2 b + -

  30. C a A B b D C a B b D 4.3.3 NFA转换为等价的DFA 定理2.2对于每一个非确定自动机A,存在一个确定自动机A’使得L(A)=L(A’)

  31. 证明:构造算法如下: 1.令A’的初始状态为s’0=[s10,s20,… s0k],其中s10,s20,…s0k是A的全部初始状态。 2.若I=[s1,…,sm]是A’的一个状态, a∈∑,则定义δ’(I,a)=Iaδ,其中δ为A的转换函数。 3.重复步骤2直至不出现新的状态I为止。

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

  33. b b a + - S + P Z b b 例子:考虑下图所示的非确定自动机。 由不确定自动机A构造等价的确定自动机A‘过程如下图所示。

  34. a b a b +[SP] [P] [SZ] +S P S,Z [P] [Z] +P Z -[SZ] [P] [SPZ] -Z P -[Z] [P] 非确定自动机A -[SPZ] [P] SPZ 确定自动机A’ 由上述表格可以得出确定自动机A’。 确定自动机如下图所示。

  35. + b a SP b - - a Z P SZ b - a b SPZ b 为方便,将扩充自动机使得在边上有ε符号。我们称这种自动极为ε-自动机。并记为εDA或εNDA。

  36. 1.首先找如下ε边,其中B没有ε输出边: 如果没有这样边,则转步骤4。 ε B A 定理2.3 对任给εDA均可构造一个DA,使得这两个自动机等价,既有L(εDA)=L(DA) 构造算法:

  37. 2.设B直接后继为B1,B2,…,Bn,且有: (1≤i≤n)则作下面工作: 2.1消除原ε边(节点保留): ai 2.2引进新边: Bi A ε B A ai Bi B 2.3如果B标有“-”,则给A标上“-”。 2.4如果存在一条从始点到A点的ε路,则给B标上“+”。

  38. 3.重复步骤2直至不出现步骤1所指的ε边为止。 4.如果还有ε边,则肯定有ε闭路。这时要把闭路中的点合并为一个点,边也作相应处理。

  39. εa C a A B b D εb 情况一: C a ε A B b D 例子:下图是从εDA到DA的过程

  40. 情况二: - - - ε A B A B a C a 情况三: + + + A ε B A B A B b b D

  41. 情况四: + ε ε B S A + ε + B S A

  42. ε 情况五: b a B S A ε b a S A

  43. X 1 ε - + ε 1 S Z 1 0 Y 1 例子:下图是从εDA到DA的过程 转化过程如下:

  44. X - 1 1 -+ + 1 ε Z S 1 0 Y 1 -+ X 1 +- +- 1 1 Z S 1 1 0 1 Y 1

  45. 0 1 +-SXZ Y SXY Y Z -SXY Y SXYZ -Z S -SXYZ Y SXYZ -S Y SXY 确定化:

  46. 3 2 a   +   0 1 6 7 b   4 5 a  10 8 9 b b - 例子:求闭包,将εDA转化到DA

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

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

  49. a b +T0 T1 T2 T1 T1 T3 T2 T1 T2 T3 T1 T4 -T4 T2 ②转化为确定自动机: 转化如下: 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}

  50. b 2 b b a + - a b b 0 1 3 4 a a a 转换后的DA图如下:

More Related