1 / 63

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

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.

fred
Download Presentation

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

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. 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简介

  2. 字母 1 数字 字母 字母 3 1 1 字母 字母 1 1 3 数字 3 2 2 数字 3 4 4 5 = 数字 字母 5 = ; 6 1 L L i i n n e e = = = = 8 8 0 0 ; ; ; ; 输入 字母 输出 字母 2 0 0 0 0 0 0 0 0 1  id , ‘Line’ 数字  = ,   数字 4 3  num, ‘80’  ;,   数字 5 = ; 6 分析结束 有限控制器

  3. 3.1 词法分析程序的设计 • 3.1.1 词法分析程序的功能 • 源程序 单词序列 • 3.1.2 单词的词类和属性 (词类符号,单词的属性值) • 3.1.3 词法分析程序作为一个独立子程序(1)语法分析程序的子程序; (2)组织成一遍扫描。 词法分析器

  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' 词法分析器

  5. 词类和属性 computator n. Calcculating machine. 程序语言单词的分类: 1.关键字(保留字或基本字):begin,end 2.标识符:用来表示各种名字 3.字面常数:256,3 .14,true,‘abc’ 4. 运算符:如,+、-、*、/ 等等 5.分界符:如逗号,分号,冒号等

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

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

  8. 3.1.3 把词法分析设计成一个独立程序 (1)组织成一遍扫描;(2)作为语法分析和语义分析的子程序 错 误 的 诊 查 处 理 语法分析 中间代码 源程序 语义分析和 中间代码生成 词法 分析 符 号 表 管 理

  9. 32 词法分析器的手工构造 • 为了构造词法分析器,要研究构词法,每种词类的结构模式以及识别它的数学模型——有限自动机。它的模拟程序可以作为词法分析器的控制程序。 • 32 1确定的有限自动机(DFA) • 32 2构造识别单词的DFA • 32 3 编写词法分析程序

  10. 3.2.1 确定的有限自动机 DFA (Deterministic Finite Automata) 一. 设计一个奇偶校验器 二 .DFA的定义 三. DFA的三种表示 四. DFA接受的语言 五. DFA判定w是否属于L(m)的模拟算法 结论:如果我们能构造一个DFA M,使得L(M)是编译器处理的程序语言中的单词,那么模拟DFA M的程序将可以用作词法分析器的控制程序。

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

  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拒绝。

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

  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)状态转换图。

  15. 转移矩阵 状态转换图 a 1 a a 0 a  3 3 b 2 b b b 易存储

  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

  17. 从状态转换图看,从初态出发,沿任一条 路径到达接受状态,这条路径上的弧上的标 记符号连接起来构成的符号串被接受。 b 0 3 b a a a a b 1 2 b

  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");

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

  20. 字母 * 0 字母 1 2 Pascal 标识符 数字 * 数字 0 3 4 Pascal整数和实数 数字 E – d d d * E + d d  d 0 1 7 2 3 4 5 6 7 d

  21. 3.2.3 编写词法分析程序 根据画出的状态转换图(识别单词的)构造词法分析程序,每个状态对应一段程序,完成到达此状态的工作;词法分析程序的控制程序模拟状态转换图的状态转换。 在识别标识符的过程中,要拼写出来,并和保留字区别开来;在识别常数的过程中,要把它转换成机器表示以作为属性值。

  22. 使用下面的全局变量和过程: 1. Character 2. Token 3. Getchar 4. getbc 5. Concatenation 6. letter,digit 7. Reserve 8. Retract 9. buildlist 10. return

  23. 作业: 3.2 3.3解释下面每个有限自动机识别的语言是什磨? 1 1 0 0 (a) 1 2 3 4 5 1 0 1 0 0 0 0 6 7 8 9 1 1 1 (b) a a a a 1 2 3 4 5 a

  24. 1 0 ( c ) 1 0 0 0 1 2 1 0 3.4 给出接受下列在字母表{0,1}上的语言的DFA: ( a ) 所有以00结束的串的集合; (b) 所有具有三个0的串的集合。

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

  26. 一. 非确定的有限自动机NFA m 定义3.2 非确定有限自动机M是一个五元组 M=(Σ,Q,q0,F,δ) 其中Σ,Q,q0,F的意义和DFA的定义一样,而δ是一个从QXΣ∪{ε}到Q的子集的映射,即δ:QXS2Q 类似DFA,NFA m可用状态转换图表示,可定义NFA m接受的语言。

  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

  28. L(m)=L(m’)={0,1}+—10{0,1}* 0 1 1 0 q0 q0 q1 1 1 q0 {q0} {q1} 0 1 q0 {q0,q1} 0,1

  29.    a a 2 2 2 2 2 3 3              a a b b b b 0 0 6 6 6 6 1 1 1 1 1 7 7 7 7 7 8 8 9 9    10 10      b b b 5 5 5 0,1,2,4,7 4 4 4 4 4 a   3,8,6,1,2,4,7 b 例3.3从具体例子的讨论,提炼出从NFA构造DFA的算法。 5,9,6,1,2,4,7 b 5,10,6,1,2,4,7

  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, )) (tT’) UNTIL T=T’ tT

  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 td

  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; • 

  33.  a 3 2     b b a 0 6 1 7 8 9 10   b 5 4 0,1,2,4,7 2 3 3,8,6,1,2,4,7 2 4 5,6,1,2,4,7 2 3 5 5,9,6,1,2,4,7 2 5,10,6,1,2,4,7 2 3

  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是可区别的。

  35. q2 a a a ,b b q1 q4 a q3 b b a a b q2 q4 q5 a b q1 b a a b a b q3 a q6 q7 b b

  36. 1.等价状态定义了状态集合上的等价关系。因此,状态集合能被划分成等价类;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称为判别序列。

  37. 三. 方法: 构造一张表,对每一个状态对(qi,qj)(i<j)有一表项,每当发现一对状态不等价时,就放一个x到相应表项中。 1 . 根据一致性条件,在每一个对应于终结状态和非终结状态的表项中放上一个x。 2 .根据蔓延性性条件,对每一个状态对(p,q),若a,(p,a)=r, (q,a)=s,r和s不等价,则(p,q)不等价。重复2,直到没有新的不等价状态对出现。

  38. 0 1 1 0 q1 q2 q3 0 1 1 0 0 1 1 0 q5 q6 q7 q8 q2 q3 q5 q6 q7 q8 1 x 0 x x x x x x x x x x x x q1 q2 q3 q5 q6 q7

  39. 3.4 正规表达式 用正规表达式描述单词,把它转换成识别装置----有限自动机。 3.4 .1正规表达式与单词 一.正规表达式的定义 二.正规表达式的代数性质 三.正规定义式 四.例示,用正规定义式描述单词 3.4 .2 正规表达式与有限自动机的等价性 L( r )=L(m)

  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 )

  41. 注:(1)正规表达式描述的集合称作正规集(正规表达式的计算描述如何构造正规集)。(2)“*”,连接,“”运算左结合,优先级由高到低。注:(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

  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*

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

  44. 正闭包r+, 表达的语言 (L( r ))+ (L( r ))+=(L( r ))1 (L( r ))2 (L( r ))3…… r*=r+ r+= r r* 三.正规定义式 给正规表达式命名,引用。 ,序列: d1r1 d2 r2 ... dnr n 其中di表示不同的名子,每一个ri是 d1,d2,…,di-1上的正规表达式。 正规定义式和产生式的区别。

  45. 四.例示,用正规定义式描述单词 例3.4 Pascal标识符和无符号实数 letter(letterdigit)* letterA B ... Z a b ... z digit 0 1 ... 9 id  letter(letterdigit)* (digit)+(.(digit)+ )((E(+ - )(digit)+) ) digits digit(digit)* fraction  digits  exponent ( E(+ - )digits)  num  digits fraction exponent

  46. 3.4.2 正规表达式与有限自动机的等价性 单词结构用正规表达式描述,用机械的方法(程序),把正规表达式变换成等价的有限自动机。 定理3.2 设r是上一个正规表达式,则存在一个FA m接受L( r )。反之亦然。 证  对正规表达式r的运算数目作归纳。设r具有零个运算,则或r=或r= 或r=a  a q0 q0 q1 q0 q1 r=  r=a r=

  47. 设结论对少于i(i1)个运算的正规表达式r成立。当r有i个运算时,有三种情况:设结论对少于i(i1)个运算的正规表达式r成立。当r有i个运算时,有三种情况: 情况1 r=r1r2 情况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 ).构造方法图示如下: m1 q1 f1   q0 f0  m2  q2 f2 r=r1r2

  48. m2 m1 q1 f1 q2 f2  r=r1r2   q0 q1 f1 f0  r=r1* 上述证明方法,是对于一个正规表达式r,构造一个FA m,且L(m)=L( r )的算法,但假定知道r的计算顺序。 正规表达式r的语法是上下文无关文法。

  49. 例3.5构造与下列正规式 ( c) r=01*1 等价的有限自动机。语法树如左下图。  0 q0 q1 1 1 q2 q3  * 0   1 q4 q2 q3 q5  1

  50.   1 0  q0 q3 q1 q4 q2 q5  1 q6 q7  0  1   q0 q1 q4 q2 q3 q5    q8  q9 1  q6 q7

More Related