编译原理
  • 编译原理
  • 一些简答题
  • 绪论
    • 编译器简介
    • 程序设计语言
    • 静态与动态
    • 参数传递机制
  • 词法分析
    • 词法单元、模式、词素
    • 串和语言
    • 正则表达式
    • 状态转换图
    • 不确定有穷自动机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
  • 拓广文法
  • 项目集规范簇
  • ACTION-GOTO表
  1. 语法分析

算法:LR(0)

Previous移入-归约语法分析Next算法:SLR(1)

Last updated 4 months ago

拓广文法→列项目→项目集规范簇(DFA图)→分析表

拓广文法

  1. 在起始符前面再加上一个起始符

  2. 有选择运算符的,将每一个单列为一个产生式

项目集规范簇

  1. I0,将所有产生式左部加上一个点

  1. 点往后跳一个符号,如果点后面是终结符不用管

  1. 如果点后是非终结符,将这个非终结符的所有项目都写到当前这个项目中(除去第一个拓广文法)。

注意不同项目之间的关系,保证不能重复新建项目簇,如果重复需要指向之前的项目簇。

ACTION-GOTO表

ACTION是终结符的集合,GOTO表中是非终结符的集合。

  • 将当前状态能够转换到达的状态填入表中对应位置

  • GOTO部分直接写序号,ACTION部分需要写S+序号

  • 如果当前状态是最终状态(点在最后),并且在拓广文法中有相应的产生式,则在全部ACTION部分填入r+序号(拓广文法中产生式的序号),代表结束

  • 将额外添加的第一个拓广文法所在的项目簇对应$处填入acc。