第四章词法分析

合集下载

2hhh第4章 词法分析

2hhh第4章 词法分析

假定一个 C 语言子集的所有单词 符 号 为 : while, if, else, switch, case, 标识符, 常数, +, -, *, <, <=, =, ==, ;。
其种别编码和内码值如下表所示:
表2.1 一个C语言子集的单词符号 及其种别编码和内码值
单词符号 种别编码 助记符 while 1 res res if 1 else 1 res switch 1 res case 1 res 标识符 2 id 内码值 while if else switch case id位置
j
k
对于一个含回路的状态, 可用一个 while 语句来实现。考虑下述状态 转换图, 其对应的while语句如下: 字母或数字
i
其它
j
状态i对应的while语句: getchar ( ); while ( letter( )||digit( ) ) getchar (); 实现状态 j 功能的语句;
说明: 直接使用整数编码不利于记忆, 该 例中采用一些助记符表示种别编码。
单词符号 种别编码 助记符 3 num 常数 + 4 op − 4 op * 4 op <= 5 rop < 5 rop == 5 rop 6 = = ; ; 7
内码值 num位置 + * LE LT EQ _ _
2.2.2 C语言子集对应的状态转换图
(6) reserve( ): 按token数组中字符 串查保留字表, 若是保留字则返回 其编码, 否则返回0。
(7) retract( ): 扫描指针回退一个字 符, 同时将character置为空。 (8) buildlist( ): 将标识符登录到符 号表或将常数登录到常数表。

四词法分析PPT课件

四词法分析PPT课件

正规集
L(e1) L(e1)∪L(e2) L(e1)L(e2) (L(e1))*
说明: 算符的优先顺序: ‘*’ > ‘.’ > ‘|’
‘.’和‘|’都是左结合
4. 仅由有限次使用上述三步定义的表达式才是 ∑上的正规式,仅由这些正规式所表示的字 集才是∑上的正规集。
例子
令={a,b}, 上的正规式和相应的正规集有
G:S→a A|a
A→dA|d
先由产生式得: S=aA|a
A=d*d
将A代入S中得:
S=ad*d|a
利用正规式变换得 S=a(d*d|ε)=ad*
说明:d*d|ε=(ε|d|dd|…)d|ε
=d|dd|…|ε= d*
所求正规式为ad*
4.2 有穷自动机(也称有限自动机)
是一种识别装置 作用:能准确地识别正规集,即识别正规文法所定 义的语言和正规式所表示的集合 意义:为词法分析程序的自动构造寻找特殊的方法 和工具。 分类: 确定的有穷自动机
其中B为一新非终结符
例: 将R=a(a|d)*转换成相应的正则文法 令转换成文法G=(VN,VT,P,S) 其中VT={a,d}, 文法开始符为S 首先形成S→a(a|d)*,然后变换 S→aA A→(a|d)*
A→(a|d)A A→ε
A→aA A→dA
最终有产生式: S→aA , A→ ε, A→aA, A→dA
➢描述标识符的正规文法为 <标识符>→l|l<字母数字> <字母数字>→l|d|l<字母数字>|d<字母数字> ➢描述无符号整数的正规文法
<无符号整数>→d|d<无符号整数>
4.1.2 正规式(正则表达式) Regular Expression

第四章 词法分析

第四章  词法分析

共110页, Page11 110页 Page11
4.2 单词的描述工具
目前, 目前,多数程序设计语言的单词符号都能 用正规文法或正规式来定义。 用正规文法或正规式来定义。 例如,高级程序设计语言中的“标识符” 例如,高级程序设计语言中的“标识符” 这个单词, 这个单词,其词结构是一个以字母开头的字母 数字串, 数字串,那么定义其左线性文法为 标识符> →l|<标识符>l|<标识符 标识符>l|<标识符>d <标识符> →l|<标识符>l|<标识符>d 或其右线性文法为 标识符>→l|l<字母数字> >→l|l<字母数字 <标识符>→l|l<字母数字> 字母数字>→l|d|l<字母数字>|d<字母数字> >→l|d|l<字母数字>|d<字母数字 <字母数字>→l|d|l<字母数字>|d<字母数字>
共110页, Page10 110页 Page10
4.1.3 将词法分析工作分离的考虑 1.使整个编译程序的结构更简洁、 1.使整个编译程序的结构更简洁、清晰和条理 使整个编译程序的结构更简洁 化。 2.编译程序的效率会改进 编译程序的效率会改进。 2.编译程序的效率会改进。 3.增强编译程序的可移植性 增强编译程序的可移植性。 3.增强编译程序的可移植性。
第四章 词法分析
4.1 词法分析程序的设计 4.2 单词的描述工具 4.3 有穷自动机 4.4 正规式和有穷自动机的等价性 4.5 正规文法和有穷自动机的等价 性 4.6 词法分析程序的自动构造工具
共110页, Page1 110页 Page1

第四讲词法分析

第四讲词法分析
计算机学院
编译原理
DFA的表示形式(状态转换关系表示形式):
状态转换矩阵:DFA的映射关系由一个矩阵来表示。 状态图:
注: 1)用矩阵表示转换便于计算机处理,但不直观,而用 状态转换 图表示比较直观。 2)在整个状态转换图中只有一个初始状态结点,用”=>” 射入 的结点表示初始状态。可有若干终止状态(也可能没有),用双园圈 表示。若初始状态结点同时又是终止状态结点,则表示空串可为 相应DFA识别。
计算机学院
编译原理
正规文法、正规式和正规集的关系
一个正规语言可以用正规文法定义,也可以用正规式定义,对任 意一个正规文法,存在一个定义同一个语言的正规式;
同样,对每个正规式,存在一个生成同一语言的正规文法; 有些正规语言很容易用文法定义,有些则用正规式定义更容易;
两者之间是可以转换的,结构上具有等价性。 由正规文法或正规式定义的正规语言的集合构成正规集。
(4)仅由有限次使用上述三步骤而定义的表达式才是∑上的正规式
,仅由这些正规式所表示的字集才是∑上的正规集。
计算机学院
编译原理
例: ∑={a,b}
正规式 a表示的正规集{a} 正规式(a|b)表示的正规集{a,b} 正规式ab表示的正规集{ab} 正规式(a|b)(a|b)表示的正规集{aa,ab,ba,bb} 正规式 a* 表示的正规集是{,a,aa,aaa,…..任意个a的串} 正规式(a|b)*表示的正规集是{,a,b,aa,ab,…..所有ab
S=aA|a A=(aA|dA)|(a|d) A=(a|d)A|(a|d) A=(a|d)*(a|d) S=a(a|d)*(a|d)|a S=a((a|d)*(a|d)| ) S=a(a|d) *

第四章词法分析器与单词符号

第四章词法分析器与单词符号

出错处理
对定义外的( 对定义外的(如,对首字符不是字母的,不是数字的, 对首字符不是字母的,不是数字的, 不是运算符和分界符的)单词进行出错处理。 不是运算符和分界符的)单词进行出错处理。
2、状态转换图
利用状态转换图可以设计词法分析器。 利用状态转换图可以设计词法分析器。状态转换图是 一个有向图,仅包含有限个结点, 一个有向图,仅包含有限个结点,每个结点表示一 个状态,其中有一个初态结点,至少有一个终态结 个状态,其中有一个初态结点, 点,结点间弧的标记可以是输入字符或字符类。 结点间弧的标记可以是输入字符或字符类。
字母|数字 0 字母 数字 + * / < 1 数字 3 5 6 7 8 = 9 > 11 : 13 ; 其它 16 17 = 13 10 其它 其它 4 2
举例
开始 滤掉空格 是字母? 是字母? Y 读标识符 查关键字表 查到否? 查到否? Y 保留字类码⇒ 保留字类码⇒sy N 是数字? 是数字? Y 取数 N
属性字序列 源程序 词法分析程序 语法分析程序 ….
单词符号
单词符号是程序语言的基本语法单位, 单词符号是程序语言的基本语法单位,一般分为下 面 5 种: 关键字(基本字):(个数确定,可全体编为一类, ):(个数确定 关键字(基本字):(个数确定,可全体编为一类, 也可一字一类) 也可一字一类) 标识符: 个数不确定,作为一类) 标识符:(个数不确定,作为一类) 常数: 个数不确定, 常数:各种类型的常数 。(个数不确定,按类型分 类) 运算符: 个数确定, 运算符:如+、-、*、/、<等。(个数确定,一符一 类) 界符: ,、;、(、)、: 个数确定, 界符:如,、;、(、)、: 等。(个数确定,一符 一类) 一类) 注意:一种语言的单词如何分类、怎样编码,主要取 注意:一种语言的单词如何分类、怎样编码,主要取 决于技术上的方便。 决于技术上的方便。

第04章、词法分析

第04章、词法分析
38
例子 NFA M=({S,P,Z},{0,1},f,{S,P},{Z}),
本章重点
• 单词的描述工具 • 单词的识别系统 • 设计和实现词法分析程序
– 首先需要描述和刻画程序设计语言中的原子单位—— 单词,其次需要识别单词和执行某些相关的动作。
– 描述程序设计语言的词法的机制是正规表达式,识别 机制是有穷状态自动机。
3
4.1 词法分析程序
实现词法分析(lexical analysis)的程序 – 逐个读入源程序字符并按照构词规则切分成一系
正规集 { ,a,b,aa,ab ……所有由a 和b组成的串} {上所有含有两个相继 的a或两个相继的b组成的串}
18
讨论下面两个例子 例4.1 令={l,d},则上的正规式 r=l(l d) 定义的正规集
为: {l,ll,ld,ldd,……},其中l代表字母,d代表数字,正规式 即 是 字母(字母|数字) ,它表示的正规集中的每个元素的模 式是“字母打头的字母数字串”,就是Pascal和多数程序 设计语言允许的的标识符的词法规则. 例4.2 ={d,•,e,+,-}, 则上的正规式d(•dd )(e(+- )dd )表示的是无符 号数的集合,其中d为09的数字。比如2、21.59、3.6e2、 471.88e-1等都是该正规集中的元素。 程序设计语言的单词都能用正规式来定义
1. rs=sr
“或”服从交换律
2. r(st)=(rs)t
“或”的可结合律
3. (rs)t=r(st)
“连接”的可结合律
4. r(st)=rsrt
(st)r=srtr
分配律
5. r=r, r=r
是“连接”的恒等元素 零一律
6. rr=r r=rrr… “或”的抽取律

《编译原理》第4章词法分析

《编译原理》第4章词法分析

编译原理武汉大学计算机学院编译原理课程组第4章词法分析·词法分析器·单词符号·词法分析程序设计·词法分析器的自动生成4.1 词法分析器与单词符号词法分析程序依据语言词法规则,分析由字符组成的源程序,把它识别为一个一个具有独立意义的最小语法单位,即“单词”,并识别出与其相关的属性(如是标识符,是界限符,还是数,等等),再转换成长度上统一的标准形式——属性字,把字符串形式的源程序改造成为单词符号串(属性字)形式的中间程序,以供其它部分使用。

1. 词法分析程序的作用如删除注解、空格、回车符、换行符之类非必要信息,把标识符登录入符号表及某些预加工处理等。

4.1 词法分析器与单词符号2.词法分析程序的地位·作为一个独立阶段⑴能独立地研究词法与语法两方面的特性。

⑵词法规则简单,可建立特别适用的有效分析技术,易于实现词法分析程序生成自动化。

⑶可以就同一语言,为每种不同的机器编写一个词法分析程序,而只编写一个共同的语法分析程序。

每当语法分析程序需要一个单词符号时就调用词法分析子程序,每一次调用,词法分析子程序就从源程序中识别出一个单词符号交给语法分析程序。

2.词法分析程序的地位4.1 词法分析器与单词符号·作为一个独立阶段·安排为一个子程序4.1 词法分析器与单词符号3. 单词符号程序语言的单词符号一般可分为五种:关键字、标识符、常数、运算符、界限符。

•单词种别一类一码;一符一码。

•单词符号的属性值反映单词符号特征或特性的值。

如标识符的符号表指针,常数的常数表指针等。

4.2 扫描程序的设计1.预处理如删除注解、空格、回车符、换行符之类非必要信息。

从源程序中处理出一串确定长度的输入字符,并将其装进词法分析程序指定的缓冲区——扫描缓冲区中。

4.2 扫描程序的设计1.预处理2.单词符号的识别——超前搜索•关键字的识别•标识符的识别•常数的识别•算符和界限符的识别4.2 扫描程序的设计状态转换图的实现:将状态转换图看作是通常的程序框图。

编译原理课件-词法分析

编译原理课件-词法分析
有窮自動機分為兩類:確定的有窮自動機 (Deterministic Finite Automata)和不確定的有 窮自動 機(Nondeterministic Finite Automata) 。
關於有窮自動機將討論如下內容
確定的有窮自動機DFA 不確定的有窮自動機NFA NFA的確定化 DFA的最小化
VT={a,d} VN={S,A,B}
A B(ad)B B
AdB
正規文法和正規式
對G=(VN,VT,P,S),存在一個 =VT上的正規式R : L(R)=L(G)
AxB AxAy Axy
, By ≈ A=xy ≈ A=xy ≈ A=xy
正規文法和正規式
G[s]:SaA|a AaAadAd
A(ad)A(ad)
=f(Q,b)=Q
Q屬於終態。
得證。
a
Ua b, a
S
b
aQ
b
V
b
DFA M所能接受的符號串的全體記為L(M).
對於任何兩個有窮自動機M和M′,如果L(M)=L(M′),則 稱M與M′是等價的.
結論:
上一個符號串集V是正規的,當且僅當存在一個上 的確定有窮自動機M,使得V=L(M)。
DFA的確定性表現在轉換函數f:K×Σ→K是一個單值函 數,也就是說,對任何狀態k∈K,和輸入符號a∈Σ, f(k,a)唯一地確定了下一個狀態。從狀態轉換圖來看, 若字母表Σ含有n個輸入字元,那麼任何一個狀態結 點最多有n條弧射出,而且每條弧以一個不同的輸入 字元標記。
狀態
字元
a
S
U
U
Q
V
U
Q
Q
b
V0
V0
Q0
Q

词法分析

词法分析

正规式和正规集的递归定义: 1) ε 和 Φ 都是 ∑ 上的正规式,它们所表示的正规集 分别为 {ε} 和 Φ; 2) 任何 a∈∑, a 是 ∑ 上的一个正规式,它所表示的 正规集为 {a}; 3) 假定 e1 和 e2 都是 ∑ 上的正规式,它们所表示的 正规集分别记为 L(e1)和 L(e2),则: e1|e2、e1e2 和(e1)* 也都是正规式,它们所表示 的正规集分别为 L(e1)∪L(e2)(或)、L(e1)L(e2) (连接积)和(L(e1))*(闭包),优先级为闭包、连 接积、或。 仅由有限次使用上述三步骤而得到的表达式才是∑上的正 规式。仅由这些正规式所表示的字集才是∑上的正规集。 12
14
正规式的等价
若两个正规式所表示的正规集相同,则认为二者等价。 两个等价的正规式 R1 和 R2 记为 R1=R2。 【例如】 (a|b)* = (a*|b*)* b(ab)* = (ba)* b
15
正规式的性质:
令 A、B和C均为正规式,有下列关系成立: A|B = B|A A|(B|C)=(A|B)|C 交换律 结合律
20
【例 】将描述标识符的正规式R=l(l|d)*转 换成相应的正规文法
令 S 是文法开始符号,根据规则(2)变换为 Sl(l|d)* 根据规则(3)变换为 SlA A(l|d)* 根据规则(4)变换为 SlA A(l|d)A A->ε B(l|d)B B->ε 进一步变换为 SlA AlA|dA|ε
词法分析器所输出的单词符号常常表示成如下的二元式: (单词种别,单词符号的属性值) 1. 单词种别(它是语法分析需要的信息) 通常用整数编码。 一个语言的单词符号如何分种,分成几种,怎样编码, 是一个技术性的问题。它主要取决于处理上的方便。 标识符一般统归为一种。 常数则按类型分种。 关键字可将其全体视为一种,也可以一字一种。采用 一字一种的分法实际处理起来较为方便。运算符可采 用一符一种的分法,但也可以把具有一定共性的运算 符视为一种。 至于界符一般用一符一种的分法。

第四章 词法分析课外训练

第四章 词法分析课外训练

第四章词法分析
(一)内容
本章介绍编译程序的第一个阶段词法分析的设计原理和设计方法,包括源程序输入与词法分析程序输出、正则文法及其状态转换图、确定的有限自动机(DFA)、不确定的有限自动机(NFA)、正则表达式与正规集。

(二)本章重点
词法分析器的逻辑结构与功能,状态转换图,正规表达式与正规集、DFA、NFA及其等价转换,NFA的确定化,DFA的最小化。

(三)本章难点
正则式与自动机的应用,NFA的确定化,DFA的最小化。

(四)本章考点
正规式到NFA的转换。

NFA的确定化。

DFA的最小化。

(五)学习指导
掌握正规文法、状态转换图、DFA、NFA、正规表达式和正规集的基本概念和词法分析器的设计与程序编写。

词法分析的任务是对源语言所编写的代码进行从左到右的扫描,产生一个个的单词符号(token),由这些单词符号形成的中间程序是后续语法分析输入。

在理论上词法分析器的构造是根据一种语言的正规文法描述形成相应的状态转换图(DFA),若输入字符串能够被该DFA接受,则认为当前输入是语言中的一个单词符号。

因此,DFA的构造是本章学习的重点。

附训练试题:
1写出能被5整除的十进制整数的文法及正规表达式。

2:已知有限自动机如图
(1)以上状态转换图表示的语言有什么特征?
(2)写出其正规式与正规文法.
(3)构造识别该语言的确定有限自动机DFA.
3请构造与正规式R=(a*b)*ba(a|b)*等价的状态最少的DFA(确定有限自动机)
4设字符集∑={ a, b } ,请写出不以a开头的但以aa结尾的字符串集合的正规表达式,并构造与之等价的状态最少的DFA。

[定稿]第4章词法分析作业参考答案

[定稿]第4章词法分析作业参考答案

第4章词法分析作业参考答案4.7练习(P72)1.构造下列正规式相应的DFA:(4) b((ab)*|bb)*ab解:先将正规式转换为NFA,转换过程如下:以下为最终所得的NFA图:然后,将此NFA转换为DFA:转换关系矩阵如下表:所得DFA图如下:最后,将此DFA化简后如下:4、把图4.21(a)和(b)分别确定化和最小化:(a)图【解】子集法:重命名:确定化的DFA为:(b)图【解】【解】初始划分得Π0:终态组{0},非终态组{1,2,3,4,5}对非终态组进行分割:{1,2,3,4,5}a ={0,1,3,5}而{0,1,3,5}既不属于{0},也不属于{1,2,3,4,5}∵{4} a {0},所以得新划分Π1:{0},{4},{1,2,3,5}对{1,2,3,5}进行分割:∵{1,5} b {4}{2,3} b {1,2,3,5},故得新划分Π2:{0},{4},{1, 5},{2,3}{1, 5} a {1, 5}{2,3} a {1,3},故状态2和状态3不等价,得新划分:Π3:{0},{2},{3},{4},{1, 5}这是最后划分最小DFA:7.给文法G[S]:S→aA|bQA→aA|bB|bB→bD|aQQ→aQ|bD|bD→bB|aAE→aB|bFF→bD|aE|b构造相应的最小的DFA。

【解】首先,将正规式转换成NFA如下:然后,将此NFA转换为DFA:转换关系矩阵如下表:所得DFA图如下:化简后的最后划分为:T0={T0},T1={T1,T2},T3={T3,T4},T5={T5,T6},其中T3为终态。

最后,将此DFA化简后如下:8.给出下述文法所对应的正规式:S→0A|1BA→1S|1B→0S|0【解】由题意得:A=>1S|1,B=>0S|0 ,S→0A|1B,将A,B右端代入S的产生式得:S→0(1S|1)|1(0S|0)=01S|01|10S|10=(01|10)| (01|10)S∴S→(01|10)| (01|10)S∴S=(01|10)| (01|10)*∴该文法所对应的正规式为:(01|10)| (01|10)*9将图4.22的DFA最小化,并用正则式描述所识别的语言。

第4章词法分析-PPT精品

第4章词法分析-PPT精品

Sb
aQ
f(S,baab) =f(f(S,b),aab) =f(V,aab)
bV b
=f(f(V,a),ab) =f(U,ab)
=f(f(U,a),b)
=f(Q,b)
=Q
Q属于终态。得证。
编译原理
• DFA M所能接受的符号串的全体记为L(M)
• 结论:
– 上一个字符串集V是正规的,当且仅当存 在一个上的确定有穷自动机M,使得V=L(M)。
两个正规式等价
编译原理
• 若两个正规式e1和e2所表示的正规集相同,则 说e1和e2等价,写作e1=e2。
–例如: e1= (ab), e2 = ba
–又如: b(ab) = (ba)b (ab) = (ab)
编译原理
正规式的运算律
• 设r,s,t为正规式,正规式服从的代数规律有:
2) DFA的转换函数是单值, NFA的转换函数是多值。
例子
编译原理
NFA N=({S,P,Z},{0,1},f,{S,P}, {Z})
其中 f(S,0)={P}
f(S,1)={S,Z} f(P,1)={Z} f(Z,0)={P} f(Z,1)={P}
状态图表示
1
1S
0,1
Z
0
P
1
矩阵表示
S P Z NFA N=({S,P,Z}, {0,1},f,{S,P}, {Z})
编译原理
•词法分析工作独立的原因: 简化设计 改进编译效率 增加编译系统的可移植性
编译原理
4.2 正则表达式和正规集 单词的描述工具
正规文法 文法G=(VN,VT,P,S),P中每一产生式的形式 都为:A→aB或A→a,其中A∈VN ,B∈VN ,a∈VT。

工学第四章词法分析1课件

工学第四章词法分析1课件

内部字符串
整数值
数值
0或1 内部字符串
-
-
-
-
…..
-
-
-
-- 6/47
计算机教研室
考虑下述C++代码段:while (i>=j) i--; 经词法分析器处理后,它将被转换为如下的单词符号 序列: <while, -> <(,-> <id,指向i的符号表项的指针> <>=,-> <id,指向j的符号表项的指针> <),-> <id,指向i的符号表项的指针> <--,-> <;,->
点,另一个为句末符。所以一直搜索到这里 才能区分开1 句是DO语句,3语句是赋值句。 语句2、4主要区别在于右括号之后的第一个字符:一个 为字母,另一个为等号。所以也只能搜索到该字符才能得 到语句2是IF语句,语句4是赋值句。
2024/7/22
第四章:词法分析
12/47
计算机教研室
4.2单词的描述工具
的值。标识符单列一种。常数按类型分种类。
2024/7/22
第四章:词法分析
4/47
计算机教研室
1)按单词种类分类
单词名称
类别编码 单词值
标识符
1
无符号常数(整)
2
无符号浮点数
3
布尔常数
4
字符串常数
5
保留字
6
分界符
7
2024/7/22
第四章:词法分析
内部字符串 整数值 数值 0或1 内部字符串 保留字或内部编码 分界符或内部编码
任何a∈Σ, a是Σ上的一个正规式,它所表示的正规集为

第4章 词法分析(1-6)

第4章 词法分析(1-6)
3。假定e1和e2都是上的正规式,它们所表示的
正规集分别为L(e1)和L(e2),那么,(e1), e1 e2,
e1e2, e1也都是正规式,它们所表示的正规集分 别为L(e1), L(e1)L(e2), L(e1)L(e2)和(L(e1))。 4。仅由有限次使用上述三步骤而定义的表达式才 是上的正规式,仅由这些正规式所表示的集合 才是上的正规集。
7
例如:图3.1的源程序经词法分析器的输出 〈while,—— 〉 〈id,指向i的符号表入口的指针〉
〈relop , NE 〉
〈id,指向j的符号表入口的指针〉 〈do,—— 〉 〈if,——〉 〈id,指向i的符号表入口的指针〉 〈id,指向j的符号表入口的指针〉
8
3 把词法分析设计成一个独立程序

解: 正规式
a a|b ab a* (a|b)(a|b) (a|b)* (a|b)*(aa|bbb)(a|b)* (a|b)*abb
正规集
{a} {a,b} {ab} { ,a,aa,…} {aa,ab,ba,bb} {a,b}上的任意串 *上所有含有两个相继的a
或三个连续的b的a、b串
以abb结尾的a、b串

定义:如:标识符的文法定义
I-> aA|bA|……|zA
A-> aA|bA|……|zA|ε
A-> 0A|1A|……|9A|ε
或 则 用l代表字母,d代表数字 I->lA A->lA|dA|ε

识别单词的装置:FA(finite automata)
34
2 正则语言的识别装置-FA
为了构造词法分析器,要研究构词法、每种词类的结 构模式以及识别它的数学模型——有穷自动机FA。 FA的模拟程序可以作为词法分析器的控制程序。

第4章 词法分析

第4章 词法分析



单词的描述工具--正规式
若两个正规式e1和e2所表示的正规集相同,则 称e1和e2等价,写作e1=e2。 例:

若e1=a|b,e2=b|a,则有e1=e2,a|b=b|a。 b(ab)*=(ba)*b (a|b)*=(a*b*)*

单词的描述工具--正规式

设r, s, t为正规式,正规式服从的代数规律有:
Z K是一个终态集,终态也称可接受状态或结束 状态。

有穷自动机
例:
DFA M=({S,U,V,Q},{a,b},f,S,{Q}) 其中 f 定义为: f(S,a)=U f(V,a)=U f(S,b)=V f(V,b)=Q f(U,a)=Q f(Q,a)=Q f(U,b)=V f(Q,b)=Q
有穷自动机


不断应用上述规则做变换, 直到每个产生式都符合正规文法 的形式。
正规文法与正规式的等价性

练习
将r=a(a|b)*转换成相应的正规文法。
转换规则: (1) 形如 Axy 改为 AxB, By,BVN (2) 形如 Axy 改为 AxB, Ay, BxB, By, BVN (3) 形如 Axy 改为 A x, A y

DFA 的状态图表示
a S U
a
a,b
b
a
Q
b
V
b
有穷自动机

DFA 的矩阵表示
状态 字符
S U V Q
a U Q U Q
b V V Q Q
0(非终态) 0(非终态) 0(非终态) 1(终态)
有穷自动机

∑*上的符号串t在DFA M上运行.. (我们将t表示成t1tx的形式, 其中t1∈∑,tx∈∑*) 在DFA M上运行的定义为: f(Q,t1tx)=f(f(Q,t1),tx),其中Q∈K。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第四章词法分析本章将讨论词法分析程序的设计原则,单词的描述技术,识别机制及词法分析程序的自动构造原理。

4.2 正规表达式与正规集(正规语言)4.3 有穷自动机4.4 正规式和有穷自动机的等价性4.5正规文法和有穷自动机间的转换本章重点4.1 词法分析程序1.回顾什麽是词法分析程序实现词法分析(lexical analysis)的程序–逐个读入源程序字符并按照构词规则切分成一系列单词。

单词是语言中具有独立意义的最小单位,包括保留字、标识符、运算符、标点符号和常量等。

词法分析是编译过程中的一个阶段,在语法分析前进行。

也可以和语法分析结合在一起作为一遍,由语法分析程序调用词法分析程序来获得当前单词供语法分析使用。

2.常常遇到的术语Token单词,词标,符号 lexeme词素,词位 pattern模式,式样3.词法分析工作从语法分析工作独立出来的原因:简化设计改进编译效率增加编译系统的可移植性4.2正规表达式与正规集(正规语言)程序设计语言中的单词是基本语法成分.单词符号的语法可以用有效的工具加以描述,并且基于这类描述工具,实现词法分析程序的自动构造.一.正规式也称正则表达式,正规表达式(regular expression)是说明单词的模式(pattern)的一种重要的表示法(记号),是定义正规集的数学工具。

我们用以描述单词符号。

下面是正规式和它所表示的正规集的递归定义。

1.定义(正规式和它所表示的正规集):设字母表为∑,辅助字母表∑`={Φ,ε,∣,∙,*,(,)} 。

1 。

ε和Φ都是∑上的正规式,它们所表示的正规集分别为{ε} 和{ } ;2。

任何a∈∑,a 是∑上的一个正规式,它所表示的正规集为{a};3。

假定e1和e2都是∑上的正规式,它们所表示的正规集分别为L(e1) 和L(e2),那么,(e1), e1∣e2, e1∙e2, e1*也都是正规式, 它们所表示的正规集分别为L(e1), L(e1)⋃L(e2), L(e1)L(e2) 和(L(e1))*。

4 。

仅由有限次使用上述三步骤而定义的表达式才是∑上的正规式,仅由这些正规式所表示的集合才是∑上的正规集。

2.正规式中的符号规定算符的优先顺序为“*”、“∙”、“∣”。

连接符“∙”一般可省略不写。

“*”、“∙”和“∣”都是左结合的。

3.例子令∑={a,b},∑上的正规式和相应的正规集的例子有:正规式正规集a {a}a∣b {a,b}ab {ab}(a∣b)(a∣b) {aa,ab,ba,bb}a * {ε ,a,a, ……任意个a的串}(a∣b)*{ε ,a,b,aa,ab ……所有由a 和b 组成的串}(a∣b)*(aa∣bb)(a∣b)* {∑*上所有含有两个相继的a 或两个相继的b 组成的串}4. 等价:若两个正规式e1和e2所表示的正规集相同,则说e1和e2等价, 写作e1=e2。

5.设r,s,t为正规式,正规式服从的代数规律有:(1).r∣s=s∣r “或”服从交换律(2).r∣(s∣t)=(r∣s)∣t “或”的可结合律(3). (rs)t=r(st) 连接”的可结合律(4).r(s∣t)=rs∣rt (s∣t)r=sr∣tr 分配律(5). εr=r, rε=r ε是“连接”的恒等元素零一律(6). r∣r=r r*=ε∣r∣rr∣…或”的抽取律二、正规文法和正规式的等价性1、将Σ上的正规式转换成正规文法VT = Σ对任何正规式r,选择一个非终结符S生成产生式S->r,将S为G的开始符号。

若x和y都是正规式,对A->xy,重写成:A->xB, B->y;对形如A->x|y,重写成: A->x,A->y;对形如A->x* y,重写成: A->xA A->y;不断使用如上规则,直到每个产生式最多含有一个终结符为止例如:将R=a(a|d) *转换成正规文法S-> a(a|d) * 将S是文法的开始符号。

•根据规则1形成S->aA,A-> (a|d) *•根据规则3,对第二条重写成A->(a|d)A, A->ε•最后得出正规文法为:S->aA, A->aA, A->dA, A->ε2、正规文法转换成正规式根据正规文法写出联立方程组:写法:->改为=,将左部相同的写入一个方程,为方程的左部,所有右部用+连接例如:文法G[S]为:S->aA, S->a, A-> aA, A->dA, A->a, A->d方程组为:S=aA+aA=aA+dA+a+d对方程组求解,开始符号的解即为正规式定理:形如:A=rA+t的方程的解为:A=r*t4.3有穷自动机有穷自动机(也称有限自动机)作为一种识别装置,它能准确地识别正规集,即识别正规文法所定义的语言和正规式所表示的集合,引入有穷自动机这个理论,正是为词法分析程序的自动构造寻找特殊的方法和工具。

有穷自动机分为两类:确定的有穷自动机(Deterministic Finite Automata)和不确定的有穷自动机(Nondeterministic Finite Automata) 。

一.确定的有穷自动机DFA(一).DFA定义:一个确定的有穷自动机(DFA)M是一个五元组:M=(K,Σ,f,S,Z)其中1.K是一个有穷集,它的每个元素称为一个状态;2.Σ是一个有穷字母表,它的每个元素称为一个输入符号,所以也称Σ为输入符号表;3.f是转换函数,是在K×Σ→K上的映射,即,如 f(ki,a)=kj,(ki∈K,kj∈K)就意味着,当前状态为ki,输入符为a时,将转换为下一个状态kj,我们把kj称作ki的一个后继状态;4.S∈K是唯一的一个初态;5.Z⊂ K是一个终态集,终态也称可接受状态或结束状态。

一个DFA 的例子:DFA M=({S,U,V,Q},{a,b},f,S,{Q})其中f定义为:f(S,a)=U f(V,a)=Uf(S,b)=V f(V,b)=Qf(U,a)=Q f(Q,a)=Qf(U,b)=V f(Q,b)=Q表示:一个DFA可以表示成一个状态图(或称状态转换图)。

一个DFA还可以用一个矩阵表示(二)DFA M所能接受的符号串的全体记为L(M).(三)对于任何两个有穷自动机M和M′,如果 L(M)=L(M′),则称M与M′是等价的.结论:∑上一个符号串集V⊂∑*是正规的,当且仅当存在一个∑上的确定有穷自动机M,使得V=L(M)。

DFA的确定性表现在转换函数f:K×Σ→K是一个单值函数,也就是说,对任何状态k∈K,和输入符号a∈Σ,f(k,a)唯一地确定了下一个状态。

从状态转换图来看,若字母表Σ含有n个输入字符,那末任何一个状态结点最多有n条弧射出,而且每条弧以一个不同的输入字符标记。

二.不确定的有穷自动机NFA1.定义NFA M=⎨K,∑,f,S,Z⎬,其中f 为:K⨯∑∪{ε}->2K上的映射例子NFA M=({S,P,Z},{0,1},f,{S,P},{Z})其中f(S,0)={P}f(Z,0)={P}f(P,1)={Z}f(Z,1)={P}f(S,1)={S,Z}2.NFA M所能接受的符号串的全体记为L(M)结论:∑上一个符号串集V⊂∑*是正规的,当且仅当存在一个∑上的不确定的有穷自动机M,使得V=L(M)。

三:NFA确定化:假设NFA N=(K, ∑,f,K0,K t)按如下办法构造一个DFA M=(S, ∑,d,S0,S t),使得L(M)=L(N):⑴. M的状态集S由K的一些子集组成。

用[S1 S2...S j]表示S的元素,其中S1, S2,,...S j是K的状态。

⑵ M和N的输入字母表是相同的,即是∑;⑶转换函数是这样定义的:d([S1 S2,...S j],a)= [R1R2...R t]其中{R1,R2,... , R t} =ε-closure(move({S1, S2,,...S j},a))⑷ S0=ε-closure(K0) 为M 的开始状态;⑸ S t={[S i S k...S e],其中[S i S k...S e]∈S 且{S i , S k,,...S e}⋂K t≠Φ}定义对状态集合I的几个有关运算:①状态集合I的ε-闭包,表示为ε-closure(I),定义为一状态集,是状态集I中的任何状态S经任意条ε弧而能到达的状态的集合。

状态集合I的任何状态S都属于ε-closure(I)。

②状态集合I的a弧转换,表示为move(I,a)定义为状态集合J,其中J是所有那些可从I中的某一状态经过一条a弧而到达的状态的全体。

构造NFA N的状态K的子集的算法:假定所构造的子集族为C,即C= (T1, T2,,...T I),其中T1, T2,,...T I为状态K的子集。

⑴开始,令ε-closure(K0)为C中唯一成员,并且它是未被标记的。

⑵while (C中存在尚未被标记的子集T)do{ 标记T;for 每个输入字母a do{ U:= ε-closure(move(T,a));if U 不在C 中 then 将U 作为未标记的子集加在C 中} }例:将NFA确定化等价的DFA四.确定有穷自动机的化简1、最小状态DFA的含义:没有多余状态(死状态)没有两个状态是互相等价(不可区别)2、两个状态s和t不可区别:满足兼容性——同是终态或同是非终态传播性——从s出发读入某个a(a∈∑)和从t 出发读入某个a 到达的状态等价。

3、“分割法”DFA的最小化算法的核心把一个DFA的状态分成一些不相交的子集,使得任何不同的两子集的状态都是可区别的,而同一子集中的任何两个状态都是等价的.DFA的最小化算法DFA M =(K,∑,f, k0,, k t),最小状态DFA M’1.构造状态的初始划分:终态k t和非终态K- k t两组(group)2.寻找子集中不等价状态进行细化,重复执行直到不能细化为止1.将M的状态分成非终态和终态集{S,A,B} {C,D,E,F}2 .寻找子集中不等价状态{S,A,B}->{A}{S,B}->{A}{S}{B}4.4有穷自动机和正规表达式的等价性性,即:1.对于∑上的一个NFA M,可以构造一个∑上的正规式R,使得L(R)=L(M)。

第一步,在M的状态转换图上加进两个结点,一个为X结点,一个为Y结点,从X结点用 弧连接到M的所有初态结点,从M的所有终态结点用弧连接到Y结点,形成一个与M等价的M`, M`只有一个初态和一个终态.第二步,逐步消去M`中的所有结点,直至只剩下X 和Y结点最后X和Y结点间的弧上的标记则为所求的正规式。

相关文档
最新文档