3词法分析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

转移矩阵
a 0 1 2 3 1 3 1 3 b 2 2 3 3
状态转换图 a 0 b 1 a a 3 a
b
2
b
b
易存储
例2 设DFA M=({s0,s1,s2,s3},{0,1} ,s0,δ,{s0}),其 中δ画成如下状态转换图:
1 0 s0 1 0
s1 1
0
0
s3 1
0
s2
问字符串110101,01001均能被此DFA识别吗?
字母
0
字母
1
其它
数字
2
*
Pascal 标识符 Pascal 运算符和界符
0
:
<
1 3
=
>
2 4
5 6
=

0
数字
3
其它 数 字
4
*
Pascal整数
d 0 d 1 2 d
E d
3
其它

E 4
其它
d d 5 6 d
+
其它
* 7
Pascal实数
实验一:将某门语言的关键字按字典顺序编上类号 存入一张表格中,能从键盘随意输入一个标识符, 输出该标识符的类号。 实验二:编写一个词法分析程序,对某源程序 文件进行词法分析,将其中的所有单词经词法 分析后变为由类号构成的目标文件。
§3.2 词法分析器的设计
1、预处理:将要进行词法分析的源程序去掉多余的空格,注释, 且在每个句子末尾加#后供词法分析用。 2、单词符号的识别——超前搜索 ——根据语言的文法,即词法规则来识别。 Pascal语言的词法规则如下: (1)<标识符>→<字母>|<标识符>(<字母>|<数字>) (2)<整数> →<数字>|<整数><数字> (3)<有符号整数> → (+| - |ε)<整数> (4)<无符号整数> → <整数>| <整数>. <整数> | <整数>E<有符号整数> | <整数>. <整数>E<有符号整数> (5)<界符> →+ | - |* | / |>|…… (6)<双界符> →<> | := |>= | <= |/*|……
第三章 词法分析
词法分析的任务是:从左至右逐个字符地对源程序进行 扫描,识别出一个个地单词,将识别出的单词表示成二 元组(类号,内码)。
§3.1 对于词法分析器的要求
一、词法分析器的功能和输出形式 1、功能:输入源程序,输出单词符号,并翻译成 (类号,内码)。 2、单词符号:一个程序设计语言的基本词法符号。 3、单词符号的分类: (1)关键字 (2)标识符 (3)常数 (4)运算符 (5)界符
1) 定义:非确定的有限自动机 M(记作NFA M)是 (Nondeterministic Finite Automata) 一个五无组 M=(S, Σ ,s0,f,F),其中 (a)S ,Σ,同DFA M。 (b)S0 S,S0 称为非空初态集,它不能为空。 (c)F S,F为可空终态集。 (d)f是一个从S× Σ到2S的映射,即f:S×Σ→2S 注:1) NFA M的状态转换图至少含有一个初态结点以及若干个
program(); const ass=10; begin read (A,B); C:=A+B; if (A>B) C=45; else D=60; end
注:可以自己书写一段pascal源程序(用记事本),但必须包含 所有类型的单词(关键字,界符,算术运算符,关系运算符, 常数,标识符)
§ 3. 3 正规式和有限自动机
5、确定的有限自动机的化简(DFA的化简)
1) 何谓确定的有限自动机的化简 所谓一个DFA m=(, Q, q0, F, )的化简是指寻找 一个状态数比较少的DFA m’,使L(m)=L(m’)。而且可以 证明,存在一个最少状态的DFA m’, 使L(m)=L(m’)。 2)等价状态的定义 设p,q Q ,若对任何w * , (p,w) F 当且仅当 (q,w) F ,F为终态集或F中的状态不可区分,则 称p和q是等价状态;否则,称p和q是可区别的。
一、 正规文法、正规集和正规式
1、正规文法 根据Chomsky对形式语言的定义,正规文法的产生式形式为: A→αB, A→α,或者 A→Bβ , A→β其中α,β∈VT*,A,B∈VN. 2、正规集 由正规文法所产生的语言称作正规集。 3、正规式Re (Regular expression) a)定义:设A是非空的有限字母表,A={αi|i=1,2,……n },则 1)ε,φ,αi都是正规式; 2)若α,β是正规式,则α|β,α·β,α*,β*也是正规式; 3)正规式只能通过有限次使用1),2)规则而获得.
二、 有限自动机 FA (Finite Automata) 1. 实例 2 . DFA 3. NFA 4. NFA确定化为DFA 5. DFA的化简(minDFA) 6. 正规式与有限自动机之间的关系 7. 正规文法与有限自动机之间的关系
L i
n e = 8 0 ;
字母 字母
输入带 输出
0
1
数 字
从某个初态结点到某个终态结点ε通路,则空串ε可为NFA M所识别. 5)源自文库映射f可理解为“一箭多雕”。
例5 给出正规式(a|b)*a(a|b)的NFA。
例6 设NFA M=({q0,q1},{0,1} ,{q0},δ,{q1}),其中δ 画成如下状态转换图,将其确定化为DFA。
q0
0
0 1 1
0
q1
注:
(3)不能被M接受的字符串有两种情况:
a)读完输入串,状态不停在终态即 (s0,α) *(s’, ε) 且 s‘ ∈F。 b)在读过程中出现不存在的映射,使自动机无法继续 工作 例3 构造一个DFA M,它接受字母表{a,b,c}上以a或b 开始的字符串,或以c开始但所含的a不多于1个的字符 串。 例4 构造一个自动机,使它能够识别{0,1}上以00结尾 的字符串。
注意:
(1)等价状态定义了状态集合上的等价关系。因此,状态集 合能被划分成等价类; (2)两个状态p和q等价应满足如下条件: • 一致性条件,p和q必须同时或为接受状态或为非接受状 态; • 蔓延性条件,对于a ,(p,a)=r,(q,a)=s,r和 s必须等价; 相反, r和s不等价, p和q不等价。 判定两个状态p和q不等价,只要找到一个w*, 使 (p,w)F 且(q,w) F,或者相反。 w称为判别序列。
3) 求minDFA的算法: 三. 求minDFA的算法:
(1)首先把状态集S分为终态集和非终态集。这就是基本划分: ∏0={I01,I02}。设I01属于非终态集,I02属于终态集。 (2)假定经过K次划分后,已含有m个子集,记作 ∏k={Ik1,…,Ikm}。这些子集到现在为止都是可区分的然后 继续考察这些子集是否还可划分。设任取一子集Iki={S1, S2,…,St},若存在一输入字符a,使得f(Iki,a)不全包含在Iki 的某子集中.或者f(S1,a)=t1, f(S2,a)=t2,而t1,t2,分属于∏k的不 同子集.这说明在∏k中有不等价的状态,它应该还可一分为二.对 所有子集Ikm,所有读入字符a做一遍才完成此次划分. (3)重复步骤2,直至所含子集数不再增加为止.到此∏中的每 个子集是不可再分了. (4)对每个子集任取一个状态为代表,若该子集包含原有的初 态,则此代表状态便为最小化后M的初态;若该子集包含原有的 终态,则此代表状态便为最小化后M的终态.
例1 设DFA M=({0,1,2,3},{a,b},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 2) 一个DFA有三种表示: (1)转换函数; (2)转移矩阵; (3)状态转换图。
2 4
5 6
数字
3
数 字
=
id , ‘Line’ = , num, ‘80’ ;,

有限自动机
2 、 DFA
1) 定义:一个确定的有限自动机 M(记作DFA M)是 (Deterministic Finite Automata) 一个五元组 M=(S, Σ ,s0,δ,F),其中 (a)S是一个有限状态集合。 (b)Σ是一个有穷字母表,它的每个元素称 为一个输入符号。 (c)s0∈S,s0 称为初始状态且是唯一的初态。 (d)F S,F称为终结状态集合。(终态可不止一个) (e)δ是一个从S× Σ到S的单值映射 δ(si,a)=sj(si,sj∈S,a∈Σ) 表示当前状态为si,输入符号为a时,自动机将转换 到下一个状态sj,sj称为si的一个后继。
a (a b)*
a,b aa,ab,ba,bb}
上所有以b为首后跟任意多 个a的字(句子)。 上所有以a为首的字(句子).
b)正规式的等价:若两个正规式所表示的正规集相同,则等价。
例2 证明b(ab)*=(ba)*b
4、正规式的代数性质
恒等式 rs=sr 说明 “”是可交换的
r(st)=(rs)t “”是可结合的 r(st)=(rs)t 连接是可结合的 r(st)=rs rt (st)r=srtr r=r r=r r*=(r ) r**=r*
+
分配律 对连接,是单位元素 “*”和之间的关系 “*”是幂等的
5、正规式和正规文法的联系。 正规文法G可直接求得对应语言的正规式,反之 亦可。 例3、求语言L(a)={aibjck|i,j,k>=1}的产生文法,再由相 应文法转换成正规式。
文法产生式: (0) S aSaB (1) BbBbC (2) CcCc 正规式: a+b+c+
4、 NFA确定化为DFA
定理: 任何一个NFA m,都存在一个DFA m’,使L(m’)=L(m) 证明思想:用m’的一个状态对应m的一个状态集合,用这种方法, 能从一个NFA m构造一个DFA m’,称作子集构造法。
子集法:由NFA M(S,Σ, f ,s0,F),构造一个等价 的DFA M(Q,Σ, δ ,I0,F)算法如下: 1) I0= s0 (初态)(Q中开始仅包含初态I0); 2) 设Ii= {s0 ,…,sj } ∈Q, a (对字母表中任一 字符)求f(Ii ,a)=(si,…sk)=It ,若It ∈Q, 则Q=Q∪{It}; 3) 重复(2),直到不产生新状态为止。 4) 取F={I|I∈Q,且I∩F≠φ}
—closure(I) 由两部分组成:
(1)若s∈I,则s∈—closure(I) (2)若s∈I,那么从s出发经过任意段的ε弧而能 到达的任意状态s’都属于—closure(I) b)用—closure(I)确定化NFA与子集法的差别仅在于 将原状态子集改为由—closure(I)求得。
例7 设有一NFA 其状态转换图如下,试为其构造DFA。
A 0 0|1 S 1 1 B 0 C
0 Z s3 0|1 1 0|1
例8 设有一NFA 其状态转换图如下,试为其构造DFA。
a|b x ε 1
a b
3
a 2 b
ε
a|b
y s3
4
—closure(I) 的定义和算法
a)—closure(I) 的定义
3) DFA M 接受的语言
对于所有Σ*中的任何字α,如果存在一条从初态结点 到某一终态结点的通路,且这条通路上所有标记符连接 成的字等于α,则称α可为DFA M 所识别(接受)。
注: (1)每读一个字符,读头前进一格,状态前至下一状 态,我们称它作了一步动作,记作“ ”,“ k”表k步, “ +”表一步或一步以上。“ *”表0步或0步以上。 (2)能被M所接受的字符串的集合成称为M所能识别 的语言,记作L(M)。
注:1)Re涉及三种运算符“|”或者,“·”连接,“*”闭包,优先级 *>· >|。 2)仅由字母表A={αi| i=1,2…k}上的正规式α所组成的语言称作 正规集。 3)正规式,正规集表示的都是由正规文法产生的语言,只是形 式不同。 字母表=a,b 例1 正规式α 正规集L(α)
a b (a b )(a b ) ba*
(可为0个)终态结点。 2) 某些结点既可以是初态结点也可以是终态结点. 3) 对于Σ*中的任何一个字α,若存在一条从某一初态结点到 某一终态结点的通路,且这条路上所有弧的标记字依次序连接 成的字(忽略那些标记为ε的弧)等于α,则称α可为NFA M所 识别.
3、 NFA
注:4) 若M的某些结点既是初态结点又是终态结点,或者存在一条
相关文档
最新文档