相关资料来源:慕课哈工大编译原理课程
定义:根据目前所处的状态和输入信息来决定后继行为的数学模型(类似电梯)
用M表示有穷自动机,某个串可以从初始状态到达最终状态则说该串被FA接收
由一个有穷自动机M接收的所有串构成的集合称为是 该FA定义(或接收)的语言,记为L(M )
表示:转换图和转换表
转换图:初始状态(start箭头指向)、终止状态(双圈)、带有标记的有向边、其他结点
转换表:一个二维表,填写对应输入下的下一结点
分类:确定的有穷自动机(DFA)
非确定的有穷自动机(NFA)
形式化定义M = ( S, Σ , δ,s0, F ) S: 有穷状态集(就是结点) Σ: 输入字母表,即输入符号集合。 假设ε不是 Σ中的元素 δ: 将S× Σ映射到S的转换函数。转换到的新状态唯一 s0: 开始状态 (或初始状态), s0∈ S F: 接收状态(或终止状态) 集合, F⊆ S
形式化定义M = ( S, Σ , δ, s0, F ) S:有穷状态集 Σ: 输入符号集合,即输入字母表。假设ε 不是Σ中的元素 δ: 将S× Σ映射到2S的转换函数。转换的新状态不唯一,用一个集合来表示 s0:开始状态 (或初始状态), s0∈ S F:接收状态(或终止状态)集合, F⊆ S
ps:DNA和NFA是等价的,都能互相转换
带有和不带有“ε-边”的NFA 也是等价的
三者都是可以互相转换的
NFA是比较直观也容易转化的,而DFA看起来比较复杂,但是对于计算机而言,确定的自动机处理起来才是比较舒服的。因此,从正则表达式到DFA,我们可以先从正则表达式到NFA,再从NFA到DFA
转换原理
若转换后的节点有多种情况,则可以将这个集合作为一个新的节点,再判断这个集合内的元素是否有可以转换的新结点
带有ε 边的NFA,在转换的过程中记住,ε 边可以不用转换直接到达下一个结点。
具体的过程可以看哈工大编译原理课程
视频介绍的方式还是比较直观的,其方法适合直接观察直接的转换。
如果需要真正的解题过程需要列出转换表,重新构造转换图。可以参考博文NFA到DFA
词法分析部分的概念还是比较多的,重点在于理解每一个概念的基本定义,通过他们的联系串联起来就可以很好地记住。
词法分析的目的在于将字符流转换单词流,从而作为语法分析的输入,这一章的内容其实就是在说这一个步骤。