编译原理课程学习-词法分析

    科技2024-04-05  94

    编译原理课程学习-词法分析

    概念整理

    相关资料来源:慕课哈工大编译原理课程

    正则表达式

    定义:用于描述正则语言更紧凑的表示方法,用符号为r表示每个正则表达式 r定义(表示) 一个语言,记为L(r )。运算:*、 连接、 | (优先级从高到低)

    正则定义

    就是给一个正则表达式RE取一个别名,就可以像字母表内的元素一样来使用

    有穷自动机(FA)

    定义:根据目前所处的状态和输入信息来决定后继行为的数学模型(类似电梯)

    用M表示有穷自动机,某个串可以从初始状态到达最终状态则说该串被FA接收

    由一个有穷自动机M接收的所有串构成的集合称为是 该FA定义(或接收)的语言,记为L(M )

    表示:转换图和转换表

    转换图:初始状态(start箭头指向)、终止状态(双圈)、带有标记的有向边、其他结点

    转换表:一个二维表,填写对应输入下的下一结点

    分类:确定的有穷自动机(DFA)

    ​ 非确定的有穷自动机(NFA)

    DFA

    形式化定义M = ( S, Σ , δ,s0, F ) S: 有穷状态集(就是结点) Σ: 输入字母表,即输入符号集合。 假设ε不是 Σ中的元素 δ: 将S× Σ映射到S的转换函数。转换到的新状态唯一 s0: 开始状态 (或初始状态), s0∈ S F: 接收状态(或终止状态) 集合, F⊆ S

    NFA

    形式化定义M = ( S, Σ , δ, s0, F ) S:有穷状态集 Σ: 输入符号集合,即输入字母表。假设ε 不是Σ中的元素 δ: 将S× Σ映射到2S的转换函数。转换的新状态不唯一,用一个集合来表示 s0:开始状态 (或初始状态), s0∈ S F:接收状态(或终止状态)集合, F⊆ S

    带有“ε-边”的NFA

    形式化定义M = ( S, Σ , δ, s0, F ) S:有穷状态集 Σ: 输入符号集合,即输入字母表。假设ε不是Σ中的元素 δ: 将S× (Σ∪ {ε})映射到2S的转换函数。区别在于转换的条件可以是ε s0:开始状态 (或初始状态), s0∈ S F:接收状态(或终止状态)集合, F⊆ S

    ps:DNA和NFA是等价的,都能互相转换

    ​ 带有和不带有“ε-边”的NFA 也是等价的

    概念区别总结

    正则文法:3型文法,描述正则语言的规则 (推导式)正则表达式:描述正则语言的简易形式 (*、 连接、 | 和元素连接的形式)FA:根据当前情况决定后继的数学模型 (转换图、转换表)

    三者都是可以互相转换的

    正则表达式到有穷自动机

    NFA是比较直观也容易转化的,而DFA看起来比较复杂,但是对于计算机而言,确定的自动机处理起来才是比较舒服的。因此,从正则表达式到DFA,我们可以先从正则表达式到NFA,再从NFA到DFA

    从正则表达式到NFA

    转换原理

    从NFA到DFA

    若转换后的节点有多种情况,则可以将这个集合作为一个新的节点,再判断这个集合内的元素是否有可以转换的新结点

    带有ε 边的NFA,在转换的过程中记住,ε 边可以不用转换直接到达下一个结点。

    具体的过程可以看哈工大编译原理课程

    视频介绍的方式还是比较直观的,其方法适合直接观察直接的转换。

    如果需要真正的解题过程需要列出转换表,重新构造转换图。可以参考博文NFA到DFA

    总结

    词法分析部分的概念还是比较多的,重点在于理解每一个概念的基本定义,通过他们的联系串联起来就可以很好地记住。

    词法分析的目的在于将字符流转换单词流,从而作为语法分析的输入,这一章的内容其实就是在说这一个步骤。

    Processed: 0.026, SQL: 8