编译原理 词法分析

文章目录
一、正规文法和正规式
1、文法与自动机的关系
2、正规文法与正规式
3、正规式等价
4、正规式到正规文法
5、正规文法到正规式
二、自动机
1、DFA : 确定的有穷自动机
2、NFA : 不确定的有穷自动机
3、NFA确定化算法
4、构造NFA N状态K的子集的算法
5、确定有穷自动机(DFA)化简
6、DFA的最小化算法
三、词法分析
1、正规表达式与有限自动机的等价性
2、正规文法与有限自动机的等价性
3、词法分析
一、正规文法和正规式
1、文法与自动机的关系
在这里插入图片描述

0型文法(短语结构文法):其能力相当于图灵机,可以表征任何递归可枚举集,而且任何0型语言都是递归可枚举的。

1型文法(上下文有关文法CSG):产生式的形式为α 1 A α 2 → α 1 β α 2 α_1Aα_2→α_1βα_2α
1


2

→α
1

βα
2

,即只有A AA 出现在 α 1 α_1α
1

和 α 2 α_2α
2

的上下文中时,才允许 β ββ 取代 A AA 。其识别系统是线性有界自动机。

2型文法(上下文无关文法CFG):产生式的形式为 A → β A→βA→β,β ββ取代A AA时与A AA的上下文无关。其识别系统是不确定的下推自动机。

3型文法(正规文法RG):产生的语言是有穷自动机(FA)所接受的集合。

2、正规文法与正规式
单词符号结构的描述方法:

正规文法(3型文法)
正规式(正则表达式)
正规表达式(正则表达式)(regular expression)
是说明单词模式(pattern)的一种重要的表示法(记号), 是定义正规集的数学工具。

在编译中,用以描述单词符号。

定义(正规式和它所表示的正规集):
设字母表为 ∑ ∑∑,辅助字母表∑ ′ = { Φ , ε , ∣ , • , ∗ , ( , ) } ∑’={ Φ,ε,|,•,*,(,)}∑

={Φ,ε,∣,•,∗,(,)}

Φ ΦΦ 和 ε εε 都是 ∑ ∑∑ 上的正规式,它们所表示的正规集分别为 ε {ε}ε 和 { } {}{} ;
任何 a ∈ ∑ a∈∑a∈∑,a aa 是 ∑ ∑∑ 上的一个正规式,它所表示的正规集为 a {a}a ;
假定e 1 e_1e
1

和 e 2 e_2e
2

都是 ∑ ∑∑ 上的正规式,它们所表示的正规集分别为 L ( e 1 ) L(e_1)L(e
1

) 和L ( e 2 ) L(e_2)L(e
2

) ,那么,( e 1 ) (e_1)(e
1

) , e 1 ∣ e 2 e_1| e_2e
1

∣e
2

, e 1 • e 2 e_1•e_2e
1

•e
2

, e ∗ e^e

也都是正规式,它们所表示的正规集分别为L ( e 1 ) L(e_1)L(e
1

), L ( e 1 ) ∪ L ( e 2 ) L(e_1)∪L(e_2)L(e
1

)∪L(e
2

), L ( e 1 ) L ( e 2 ) L(e_1)L(e_2)L(e
1

)L(e
2

) 和 ( L ( e 1 ) ) ∗ (L(e_1))^
(L(e
1

))


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

“ ∣ |∣ ” 读为“或”(也有使用“ + ++ ”代替“ ∣ |∣ ” 的);
“ • •• ” 读为 “连接 ”;
“ ∗ *∗ ”读为“闭包”(即任意有限次的自重复连接。
在不致混淆时,括号可省去,但规定算符的优先顺序为“ ∗ *∗ ”、“ • •• ”、“ ∣ |∣ ” 。连接符“ • •• ”一般可省略不写。“ ∗ *∗ ”、“ • •• ”和“ ∣ |∣ ”都是左结合的。

3、正规式等价
若两个正规式 e 1 e_1e
1

和 e 2 e_2e
2

所表示的正规集相同,则说 e 1 e_1e
1

和 e 2 e_2e
2

等价,写作e 1 = e 2 e_1 = e_2e
1

=e
2

例如: e 1 = ( a ∣ b ) , e 2 = b ∣ a e_1= (a|b), e_2 = b|ae
1

=(a∣b),e
2

=b∣a

又如:

e 1 = b ( a b ) ∗ , e 2 = ( b a ) ∗ b e_1= b(ab)^* , e_2 = (ba)^be
1

=b(ab)

,e
2

=(ba)

b
e 1 = ( a ∣ b ) ∗ , e 2 = ( a ∗ ∣ b ∗ ) ∗ e_1= (a|b)^
, e2 = (a*|b*)^*e
1

=(a∣b)

,e2=(a

∣b

)

正规式等价变换规则:

设r,s,t为正规式,正规式服从的代数规律有:

“或”服从交换律:r ∣ s = s ∣ r r|s=s|rr∣s=s∣r
“或”的可结合律:r ∣ ( s ∣ t ) = ( r ∣ s ) ∣ t r|(s|t)=(r|s)|tr∣(s∣t)=(r∣s)∣t
“连接”的可结合律:( r s ) t = r ( s t ) (rs)t=r(st)(rs)t=r(st)
分配律:r ( s ∣ t ) = r s ∣ r t r(s|t)=rs|rtr(s∣t)=rs∣rt ,( s ∣ t ) r = s r ∣ t r (s|t)r=sr|tr(s∣t)r=sr∣tr
零一律(ε是“连接”的恒等元素): ε r = r εr=rεr=r ,r ε = r rε=rrε=r
“或”的抽取律: r ∣ r = r r|r=rr∣r=r ,r ∗ = ε ∣ r ∣ r r ∣ … r^*=ε|r|rr|…r

=ε∣r∣rr∣…
4、正规式到正规文法

5、正规文法到正规式
对 G = ( V N , V T , P , S ) G=(V_N,V_T,P,S)G=(V
N

,V
T

,P,S) ,存在一个∑ = V T ∑ =V_T∑=V
T

上的正规式r : L ( r ) = L ( G ) r : L®=L(G)r:L®=L(G)

A → x B , B → y ≈ A = x y A→xB, B→y ≈ A=xyA→xB,B→y≈A=xy
A → x A ∣ y ≈ A = x ∗ y A→xA|y ≈ A=x^*yA→xA∣y≈A=x

y
A → x ∣ y ≈ A = x ∣ y A→x|y ≈ A=x|yA→x∣y≈A=x∣y

二、自动机
有穷自动机:

有穷自动机(有限自动机)作为一种识别装置,它能准确地识别正规集,即识别正规文法所定义的语言和正规式所表示的集合,引入有穷自动机这个理论,正是为词法分析程序的自动构造寻找特殊的方法和工具

有穷自动机分为两类:

确定的有穷自动机(Deterministic Finite Automata) :DFA

不确定的有穷自动机(Nondeterministic Finite Automata) :NFA

1、DFA : 确定的有穷自动机
DFA定义:

一个确定的有穷自动机(DFA)M是一个五元组:M=(K,Σ,f,S,Z),其中:

K 是一个有穷集,它的每个元素称为一个状态;

Σ 是一个有穷字母表,它的每个元素称为一个输入符号,所以也称Σ为输入符号表;

f 是转换函数,是在 K×Σ→K 上的映射,即,如 f(ki,a)=kj ,(ki∈K,kj∈K)就意味着,当前状态为ki,输入符为a时,将转换为下一个状态 kj ,我们把 kj 称作 ki 的一个后继状态;

S∈K是唯一的一个初态;

Z⊆K是一个终态集,终态也称可接受状态或结束状态。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值