编译原理复习-3

纯纯傻逼课

之前得到的分析都是骨架, 而血肉就是属性, 它可以是编程语言结构的任意特性.

比如数据类型, 字面值, 位置等等. 有些可以动态确定, 有些可以静态确定.

Chapter-5: 语法制导翻译

语法制导翻译分为两种:

  • 语法制导定义: 属性直接定义在文法符号上
  • 翻译方案: 翻译和文法结合, 使用语义动作指明计算次序

5.1 语法制导定义

算法性的东西很少, 更多在于设计.

考虑到SDD的求值顺序, 和上一章一样, 我们不能说可以分析所有顺序, 但是有两种顺序足够我们描述大多数语法了.

  • S属性定义,适应于自底向上的过程
    • 如果一个SDD的每个属性都是综合属性,它就是S属性的
  • L属性定义,适应于自顶向下的过程
    • 这个属性是综合属性,或者
    • 这个属性是继承属性,但是它的规则具有如下限制,即假设存在一个产生式A→X1X2…Xn,有一个通过这个产生式所关联的规则计算得到的继承属性Xi.a,则这个规则只能用:
      1. 和产生式左部A关联的继承属性
      2. 位于Xi左边的文法符号实例X1、X2、…、Xi-1相关的继承属性或综合属性
      3. 和这个Xi的实例本身相关的继承属性或综合属性,但是在有这个Xi的局部属性组成的依赖图中不存在环

S属性定义的,适合在自下而上分析过程中使用 L属性定义的,适合在自顶向下分析过程中使用

5.2 语法制导翻译方案

本课程主要关注如何用SDT实现两类重要的SDD

  • 基本文法可以用LR分析,且SDD是S属性的
  • 基本文法可以用LL分析,且SDD是L属性的

这章就多看多理解, 是一个实践性的章节.