编译原理第三章词法

描述单词的模式:(1)3型文法(2)正规式 (3)有穷自动机
在这里插入图片描述

3.1 词法分析程序的设计

词法分析就是从左至右逐个字符扫描源程序,把字符变成单词,把字符串变成单词符号串。

3.1.1 词法分析器

状体转换图
在这里插入图片描述

  • 0是初态,带双圈的2是终态
  • 从0开始
    • 若在状态0下输入的字符是一个字母,则读入,转入状态1
    • 在状态1下若下一个输入的字符时字母或数字,则读进它,并重新进入状态1
  • 重复这个过程,直到状态1发现输入字符不再是字母或数字时就进入状态2,当然这个输入的字符也被读进了。

3.3 单词的形式化表述工具

在这里插入图片描述

3.3.1 正规文法

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

  • 正规集: 相同特征的字放在一起
  • 正规式:使用一种形式化的方式+辅助符号(连接符号,空集,)表示集合

3.3.2 正规式

3.3.3 正规文法和正规式的等价性

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

3.4 有穷自动机

3.4.1 确定的有穷自动机DFA

(1)开始状态S only one
(2)终止状态(可接受状态)则可能不唯一,都在集合Z中。
(3)状态转换函数f:是单值函数,即在一个状态上给出一个输入符号只能到达唯一的下一状态。
总结这个自动机:每一个状态只能发出一条具有某个符号的边。也就是说不能出现同一个符号出现在同一状态发出的两条边上
(1)五项定义
定义
(2)状态转化图
在这里插入图片描述

  • 初始状态:根从外边来的箭头指向的状态表示
  • 接受状态:有个黑圈(两个圈)的状态是
  • 一条边一个字符
    在这里插入图片描述

(3)矩阵
行标:状态
列标:状态
中间状态的新子集不需要加入推出来的集合,然后分析集合的每一个到达的地方,一步!自己有自圈也要算。
在这里插入图片描述

最后确定终态,含有老终态的就是新的终态
例子

3.4.2 不确定的有穷自动机NFA

(1)五元组:
M = ( K , Σ , f , S , Z ) 即 ( 状 态 集 , 字 母 表 , 映 射 , 开 始 状 态 集 , 终 止 集 合 )
在这里插入图片描述
在这里插入图片描述

(2)相比DFA
映射f不再是一个单值函数(即在一个状态上给出一个输入符号可以达到多种下一状态,即"下一状态"也是一个集合)
因此只要把上面那张图加一条状态转移线,它就不再是DFA而是NFA了
(3)NFA的开始状态也可以有多个,所以五元组中的S现在表示了一个非空的开始状态集。

3.4.3 NFA转化为等价的DFA

(1)判断是否确定

  • 先看有没有空
  • 一个状态有没有不确定性

(2)子集法(默认结果写状态转化图)

  • DFA(每个状态的下一步都是确定的,没有空。只有一个开始状态,只有一个结束状态)

  • NFA(有可能转到多个状态,可能有空)

  • 求初始状态的集合,也就是求空的闭包
    在这里插入图片描述

原理:有些状态是在做同样的工作,他们的工作完全可以用一个状态来做,把这些相同功能的状态组合成一个集合,并把它重新命名为一个状态。 简称:没有识别符号就划到一个状态集合里

具体步骤
在这里插入图片描述
例子:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
画图就是讲他的初始状态全部重新编号,然后将其的过程的一个一个的重新赋值在这里插入图片描述

3.4确定的有穷自动机化简

  • 最简化的DFA:这个DFA没有多余状态(从初始状态到不了的点)、也没有两个相互等价的状态(识别相同的串,结果都同为正确或错误,这两个状态就是等价的)
  • 一致性条件:两个圈圈一个集合,一个圈圈一个集合
  • 蔓延性条件 某个集合里的元素 对于每个输入符是否每次都是指向同一个集合

分割法
(1)按照一致性条件,将状态一分为二,分为初态和终态。
(2)按照蔓延性条件,看(1)分后的集合,出现了新的集合,就重新看蔓延性继续分割。
例题

3.5 正规式和有穷自动机等价转换

在这里插入图片描述

3.6 正规文法和有穷自动机的等价性

在这里插入图片描述
步骤:从起始符开始,然后S-》aA这种的两个,就是S-》A通过a,如果是单个的符号,建立新的终态,每次单独的箭弧都指向他。

  • 21
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值