编译原理
  • 编译原理
  • 一些简答题
  • 绪论
    • 编译器简介
    • 程序设计语言
    • 静态与动态
    • 参数传递机制
  • 词法分析
    • 词法单元、模式、词素
    • 串和语言
    • 正则表达式
    • 状态转换图
    • 不确定有穷自动机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
  • 综合属性(Synthesized Attribute)
  • 继承属性(Inherited Attribute)
  • 几条约束
  • S属性的SDD
  1. 语法制导

综合属性和继承属性

Previous语法制导定义(SDD)Next语法树上的SDD求值

Last updated 4 months ago

综合属性(Synthesized Attribute)

  • 结点N的属性值由N的产生式所关联的语义规则来定义;

  • 通过N的子节点或N本身的属性值来定义;

继承属性(Inherited Attribute)

  • 结点N的属性值由N的父节点所关联的语义规则来定义;

  • 依赖于N的父节点、N本身和N的兄弟节点上的属性值;

几条约束

  • 不允许N的继承属性通过N的子节点上的属性来定义,但允许N的综合属性依赖于N本身的继承属性;

  • 终结符号有综合属性(来自词法分析),但是无继承属性(方便属性的定义)

S属性的SDD

只包含综合属性的SDD称为S属性的SDD。每个语义规则都根据产生式体中的属性值来计算头部非终结符号的属性值。

S属性的SDD可以和LR语法分析器一起实现,栈中的状态/文法符号可以附加相应的属性值,归约时,按照语义规则计算归约得到的符号的属性值。

语义规则一般不应该有复杂的副作用。要求副作用不影响其他属性的求值,没有副作用的SDD称为属性文法(Attribute Grammar)。方便语义信息的计算,每次可以专注于当前的产生式。

自底向上
自顶向下
另一个SDD的例子