【学习笔记】编译原理——第二章 词法分析

本文深入探讨了编译原理的基础概念,包括词法分析的正规式、有限状态自动机(DFA和NFA)及其转换与等价性。详细阐述了DFA和NFA的特点、识别机制、确定化与最小化过程,并通过实例解析了正规式与自动机之间的相互转换。此外,还讨论了正规集的概念及其在词法规则描述中的应用。
摘要由CSDN通过智能技术生成

系列文章目录

【学习笔记】编译原理——第一章 编译引论

【学习笔记】编译原理——第二章 词法分析

【学习笔记】编译原理——第四章 自上而下分析法

【学习笔记】编译原理——第五章 自底向上分析法

【学习笔记】编译原理——第六章 语法制导翻译




正规式与正规集

相关说明

  1. 正规式与相应的正规集都是等价的,正规集给出了相应正规式所描述的全部单词;
  2. 正规式的运算结果是正规集
  3. 正规式不是集合,其运算结果——正规集是集合,空集是特例

简单示例

在这里插入图片描述

【例】令 S={ A,B,0,1}

  1. (A|B)(A|B|0|1)* => { 标识符 }
  2. (0|1)(0|1)* => { 二进制数字串 }
  3. 1(01)* = (10)*1

正规式r所表示的正规集R是字母表∑上的语言,称为正则语言,用L(r)表示,即R=L(r)。L(r)中的元素为字符串,称为L(r)的句子。 若两个正规式r和s所表示的语言L(r)=L(s),则称r, s等价,记为r=s。

DFA——有限状态自动机

特点

DFA是具有离散输入、输出系统的纯数学模型;
DFA的技巧在于状态的设置
DFA映射的唯一性和初态的唯一性

表示方式

  1. 形式定义
  2. 状态转换图
  3. 状态矩阵
    【例】C语言中的注释DFA
    在这里插入图片描述

识别机制

对于S上的任何字a,如果存在一条从初态到某一终态结点的路径,且该路径上所有弧的标记符连接成的字等于a ,则称a为DFAM所识别(接受)。
若DFA仅一个状态结点,该状态结既是初态又是终态,则空字集合{e}为DFAM所接受。
一个DFA M所能接受的字的全体记为L(M)。

语言和等价关系

设有FA M 和 FA M’ ,若L(M) = L(M’) , 则称 M 和 M’ 等价。
也就是说存在一个语言,有不同的状态机可以识别该语言

NFA——非确定的有限自动机

定义

M =(S, ∑, f, S0, Z)
S, ∑, Z ,S0 同DFA
F :状态转换函数
如下图:转换函数可以是空集;同一个转换函数作用后也可以转换成不同状态
在这里插入图片描述

识别机制

  1. NFA中用枚举的方式进行识别
  2. 假设要判断aaa是否能被识别,则要先验证一条路径,复杂度会提升

NFA和DFA等价性

对任何一个NFA M,都存在一个DFA M’ , 使 L(M’)=L(M)。

NFA确定化——(子集法)

消去ε弧:ε-closure(I),如图
在这里插入图片描述

  1. ε-closure({5}) ={5, 6, 2}
  2. ε-closure({1,5})={1,2,5,6}

解决映射不唯一问题:求Ia
Ia={2,5}a ={3,8}
Ia={1}a ={2, 3, 4, 5, 6,7,8 }
【解释】以Ia = {1}a为例解释一下,先求ε-closure{1} = {1,2} 通过a能转移到状态{3,4,5} , 再对{3,4,5}求闭包得到{2,3,4,,6,7,8}

DFA最小化

无关状态:如果从DFA M的初态开始,任何输入序列都不能到达的那些状态称为无关状态。
等价状态:设DFA M的两个不同状态 q1,q2,如果对任意输入字符串ω,从q1,q2状态出发,总是同时到达接收状态或拒绝状态之中,称q1,q2是等价的。

如果DFA M既没有无关状态,且没有彼此等价的状态,则称DFAM是规约的(即最小的DFA )

划分法
在这里插入图片描述

正规式与FA等价性

FA转RE

  1. (规则)
    在这里插入图片描述

  2. 拓广(拓展首尾节点)
    在这里插入图片描述

  3. 替换
    在这里插入图片描述
    拓展X的目的就是通过正规式将0节点替换掉
    在这里插入图片描述
    同理将2,4节点替换掉
    在这里插入图片描述
    在这里插入图片描述
    还能更猛地替换,两个正规式直接连接
    在这里插入图片描述
    在这里插入图片描述

RE转FA

(说白了就是FA转RE的逆向)

  1. 规则
    在这里插入图片描述

  2. 拓广
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  3. 确定化
    当左边已出现所有状态时,迭代结束
    在这里插入图片描述

  4. 最小化
    找出冗余的状态
    在这里插入图片描述


测验

  1. (多选)下列关于正规式和正规集的叙述中,正确的是
    选择一项或多项:
    A. 正规式与状态自动机可以相互转换
    B. 正规式可用于描述词法规则
    C. 正规式的运算结果是正规集
    D. 正规式与相应的正规集是等价的

  2. (多选)有程序段如下
    int main( )
    { printf(“hello world.\n”);
    }
    下列选项中,词法分析器能够识别出来的单词是
    选择一项或多项:
    A. ”hello world.\n”
    B. printf
    C. ()
    D. \n
    E. main
    F. }

  3. (多选)下列关于DFA、NFA和正规式的叙述中,正确的是
    选择一项或多项:
    A. 任何一个正规式都存在一个对应的NFA
    B. 任何一个NFA M都存在一个等价的DFA M’
    C. DFA与NFA的区别之一是NFA的终态可以有多个
    D. 任何一个正规式都可以转换为一个DFA

  4. 词法分析器的输出是
    选择一项:
    A. 按语法规则识别出的具有独立意义的各类字符
    B. 按词法规则识别出的具有独立意义的各类字符
    C. 按语法规则识别出的具有独立意义的各类单词
    D. 按词法规则识别出的具有独立意义的各类单词

  5. 正规式中的“或”运算法是
    选择一项:
    A. *
    B. |
    C. •
    D. +

  6. 下列关于C语言程序预处理过程的叙述中,正确的是
    选择一项:
    A. 在语法分析过程中完成
    B. 在语法分析之前完成
    C. 在词法分析过程中完成
    D. 在词法分析之前完成

  7. 下列关于DFA的基本概念中,错误的是
    选择一项:
    A. 存在唯一一个终态
    B. 状态集合为有限集
    C. 存在唯一一个初态
    D. 映射函数有唯一性

  8. (多选)下列关于正规式和正规集的叙述中,正确的是
    选择一项或多项:
    A. 一个正规式可以生成唯一一个正规集
    B. 多个不同的正规式可以对应一个正规集
    C. 多个不同的正规集可以对应一个正规式
    D. 一个正规集可以对应唯一一个正规式

  9. 下列关于算法功能的叙述中,正确的是
    选择一项:
    A. 子集法用于将NFA确定化,划分法用于将DFA最小化
    B. 子集法用于消除NFA中的无关状态,划分法用于消除DFA等价状态
    C. 子集法用于消除NFA中的等价状态,划分法用于消除DFA无关状态
    D. 子集法用于将NFA最小化,划分法用于将DFA确定化

  10. ε-closure(I) 的含义是
    选择一项:
    A. 从状态 I 出发,经过一条或多条 ε 弧所能够达到的状态集
    B. 从状态集 I 出发,经过一条或多条 ε 弧所能够达到的状态集
    C. 从状态集 I 出发,经过一条 ε 弧所能够达到的状态集
    D. 从状态 I 出发,经过一条 ε 弧所能够达到的状态集

【答案】

  1. ABCD
  2. ABEF
  3. ABD
  4. D
  5. B
  6. D
  7. A
  8. AB
  9. A
  10. B
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值