编译原理第三章

编译原理第三章

左线性和右线性文法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.1正规语言及其描述方法

正规文法的等价形式:自动机
自动机的定义:
自动机是一种语言模型,是语言的一种识别工具,其中的有限自动机(Finite Automata, FA) 被用来处理正规语言,正规语言是编译程序设计中词法分析的对象。

3.1.1正规语言的定义

正规语言是由正规文法定义的语言;程序设计语言中的单词,大都属于此种语言
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.1.2正规语言的另外两种表示方法

正规式表示法

在这里插入图片描述
正规式是指由字母表中的符号,通过圆括号和以下三种运算连接起来构成的表达式e
闭包(*,+)连接(.)或(|)

(优先级由高到低)

在这里插入图片描述

有限自动机(FA)表示法

在这里插入图片描述
由此可以看出,优先自动机是带标记的有向图

说明(对于L3来说):
在这里插入图片描述
在这里插入图片描述

正规语言的三种表示方法综合示例

在这里插入图片描述
在这里插入图片描述

3.2有限自动机的定义和分类

3.2.1有限自动机的定义

定义:是一种数学模型,用于描述正规语言,可定义为五元组
FA=(Q,∑,S,F,δ)
在这里插入图片描述
在这里插入图片描述

3.2有限自动机所描述的语言

在这里插入图片描述
在这里插入图片描述

L(FA)生成或识别的过程

在这里插入图片描述
在这里插入图片描述

3.2有限自动机的两种表现形式

在这里插入图片描述
在这里插入图片描述

‘+’和‘-’表示开始状态和结束状态

3.2有限自动机所描述的的分类

在这里插入图片描述
确定的有限自动机:只包含一个开始状态,
在这里插入图片描述

  1. 确定的有限自动机(DFA):同时满足如下三个特征
    ①开始状态唯一;②变换函数单值;③不带 ε边
    2.非确定的有限自动机(NFA):不同时满足上述三个条件
    在这里插入图片描述

3.3有限自动机的等价转换

(1)有限自动机的确定化(NFA=>DFA)
非确定的有限自动机(NFA)较易构造,但不好用!
确定的有限自动机(DFA)较难构造,但好用!
任何一个非确定的有限机NFA,都可通过有效算法把其转化为等价的确定的有限机DFA(二者描述的语言相同)。
(2)有限自动机的最小化(DFA=>最小的DFA)
有限自动机的最小化,又称为有限自动机的化简;是指:对给定的确定的有限自动机DFA1,构造另一个确定的有限自动机DFA2,使得L(DFA1)=L(DFA2),且DFA2的状态最少。

3.3.1有限自动机的等价

1.两个自动机的等价
【定义1】设有两个有限自动机FA1和FA2,如果有L(FA1)=L(FA2),则称FA1与FA2等价,记作FA1≡FA2。
在这里插入图片描述
写出语言的方法:
①辨认通路时,从开始状态->结束状态
②将通路合并
2.连个状态的等价
【定义2】设i和j为FA的两个状态,若把其看作初态,二者接受的符号串集合相同,则有i≡j(等价)。
在这里插入图片描述

3和5都是结束状态,没有向其他状态变换,所以可以识别的符号串都只有 ε,所以等价
2可以识别a这个符号串,4可以接受b这个字符串

3.3.2有限自动机的确定化算法

2步步骤
1.消除ε边算法(εNFA=>~εNFA或DFA)
(1)存在ε闭路,将闭路上的节点合而为一
在这里插入图片描述
(2)标记隐含的开始态和结束态:
开始态的ε通路上的节点:+
结束态的逆向ε通路上的节点:-
在这里插入图片描述
(3)对ε边,按ε通路逆向逐一进行:
① 删除一个ε边;
②同时引进新边,凡由原ε边终点发出的边,也要由其始点发出。
(4)重复步骤(3),直到再无ε边
在这里插入图片描述
在这里插入图片描述
2.将~εNFA化为DFA算法( ~εNFA=>DFA)
在这里插入图片描述
在这里插入图片描述
例子
在这里插入图片描述

3.3.3有限自动机的最小化算法(DFA=>最小的DFA)

最小的有限自动机,是指满足下述条件的确定的有限自动机:
(1)没有无用状态(无用状态已删除)
(2)没有等价状态(等价状态已合并)

|.删除无用状态算法
【定义】无用状态是指自动机从开始态出发,对任何符号串的识别过程都不能到达的状态。
在这里插入图片描述
II.合并等价状态算法
【原理】两个状态i与j等价,当且仅当满足下面两个条件:
① 必须同是结束态,或同是非结束态;
②对字母表上的所有符号,状态i和j必变换到等价状态
例子
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此时划分的每个子集中状态是等价的,所以最终可以合并为一个状态
例子:化简下述DFA
在这里插入图片描述
2和8并没有出现,所以是无用状态,删除
在这里插入图片描述
{1,3,4}是非结束状态,{5,6,7}是结束状态
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
这里就是判断经过字母表中的元素得到的值是否属于一个集合,属于一个集合就是等价状态,不划分

3.4有限自动机的实现

3.4.1控制程序设计

用计算机完成有限自动机的功能,其核心是“变换”的实现技术。把变换表按某种方式存储起来,作为知识源来识别单词,实现机制是:控制程序⊕变换表
(1)假定自动机只作为识别器,即对待识别的符号串,仅回答是(表示接受)否(表示拒绝)。
(2)为便于处理,可令**#作为待识别的符号串的后继符。**
在这里插入图片描述
OK表示当前字符串能被有限自动机识别
(3)令getchar(ch)为读符号函数
在这里插入图片描述

3.4.2变换表存储结构设计

(1)二维数组,下标是(状态,输入符号)

※为了适应不同编码语言的需要,状态和输入符号可采取相应的编码形式;通常,使用连续的正整数0.1.2.3…

在这里插入图片描述
示例:
在这里插入图片描述
在这里插入图片描述

每一个状态都有一个指针指向它的子表
在这里插入图片描述

3.5正规语言描述方法之间的相互转化

三种等价的表示方法:
(1)正规文法;(2)正规式;(3)有限自动机
有限自动机为核心,介绍其他两种方法与有限自动机的关系

3.5.1正规文法与有限自动机的转换

在这里插入图片描述
只是从正规文法向有限自动机的转换时,要增加一些结束状态
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.5.2正规式与有限自动机的转换

在这里插入图片描述
在这里插入图片描述
示例:
在这里插入图片描述

步骤:
①将正规式->自动机
②自动机的确定化:
1.消除ε边;2.将~εNFA转化为DFA
③DFA的最小化

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值