编译原理
  • 编译原理
  • 一些简答题
  • 绪论
    • 编译器简介
    • 程序设计语言
    • 静态与动态
    • 参数传递机制
  • 词法分析
    • 词法单元、模式、词素
    • 串和语言
    • 正则表达式
    • 状态转换图
    • 不确定有穷自动机NFA
    • 确定有穷自动机DFA
    • 算法:正则表达式转NFA
    • 自动机到词法分析器
  • 语法分析
    • 语法分析器
    • 上下文无关文法
    • 二义性和左递归
    • 递归下降语法分析
    • 算法:求解FIRST集和FOLLOW集
    • 算法:LL(1)
    • 自底向上语法分析
    • 移入-归约语法分析
    • 算法:LR(0)
    • 算法:SLR(1)
    • 算法:LR(1)
    • 算法:LALR
    • LR分析器和LALR分析器
  • 语法制导
    • 语法制导定义(SDD)
    • 综合属性和继承属性
    • 语法树上的SDD求值
    • 依赖图
    • L属性的SDD
    • 类型
    • SDD的应用
  • 中间代码生成
    • 三地址代码
    • SSA(静态单赋值)
    • 类型和声明
    • 表达式的翻译
    • 类型检查
    • 控制流
    • 回填
  • 运行时刻环境
    • 存储组织
    • 栈式分配
    • 栈中非局部数据的访问
    • 堆管理
    • 垃圾回收
  • 代码生成
    • 代码生成器的设计
    • 目标语言
    • 目标代码中的地址
    • 基本块和流图
    • 基本块的优化
Powered by GitBook
On this page
  • NFA合并方法
  • 确定化NFA可能引发冲突
  • 词法分析器状态的最小化
  1. 词法分析

自动机到词法分析器

Previous算法:正则表达式转NFANext语法分析器

Last updated 4 months ago

  • 正则表达式:识别单个模式

  • 词法分析器:识别多个模式

NFA合并方法

引入新的开始状态,并引入从该开始状态到各个原开始状态的空串转换,得到的NFA所接受的语言是原来各个NFA语言的并集,不同的接受状态代表不同的模式。

确定化NFA可能引发冲突

  • 对得到的NFA进行确定化,得到DFA

  • 一个DFA的接受状态对应于NFA的状态子集,其中至少包括一个NFA的接受状态。如果其中包含多个对应于不同模式的NFA接受状态,则表示当前的输入前缀对应于多个模式,存在冲突。

词法分析器状态的最小化

基本思想和DFA最小化算法相同

差别:

  • 词法分析器中的接受状态对应于不同的模式

  • 对应不同模式的接受状态一定是不等价的

  • 初始划分为:所有非接受状态集合 + 对应各个模式的接受状态集合

其余划分和构造方法均相同,接受状态对应的模式就是原来的模式