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

依赖图

Previous语法树上的SDD求值NextL属性的SDD

Last updated 4 months ago

在对SDD的求值过程中,如果结点N的属性依赖于其他结点的属性,那么必须要先计算出依赖的这些属性,才能计算N的属性。

N⋅a=…M1⋅a1…M2⋅a2…N \cdot a=\ldots M_{1} \cdot a_{1} \ldots M_{2} \cdot a_{2} \ldotsN⋅a=…M1​⋅a1​…M2​⋅a2​…

所以我们使用依赖图来表示计算顺序。这些值的计算顺序形成了一个偏序关系,如果依赖图中出现了环,表示属性值无法计算。

依赖图

描述了某棵特定的分析树上各个属性之间的信息流(计算顺序),从实例a1到实例a2到有向边表示计算a2时需要a1的值。对于分析树结点N,与N关联的每个属性a都对应依赖图的一个结点N.a。

属性值的计算顺序:各个属性值需要按照依赖图的拓扑顺序计算,如果依赖图中存在环,则无法计算。给定一个SDD,很难判定是否存在一个分析树,其对应的依赖图中是否有环。但是特定类型的SDD一定不包含环,且有固定的计算顺序。如S属性的SDD、L属性的SDD。