纯纯傻逼课
之前得到的分析都是骨架, 而血肉就是属性, 它可以是编程语言结构的任意特性.
比如数据类型, 字面值, 位置等等. 有些可以动态确定, 有些可以静态确定.
Chapter-5: 语法制导翻译
语法制导翻译分为两种:
- 语法制导定义: 属性直接定义在文法符号上
- 翻译方案: 翻译和文法结合, 使用语义动作指明计算次序
5.1 语法制导定义
算法性的东西很少, 更多在于设计.
考虑到SDD的求值顺序, 和上一章一样, 我们不能说可以分析所有顺序, 但是有两种顺序足够我们描述大多数语法了.
- S属性定义,适应于自底向上的过程
- 如果一个SDD的每个属性都是综合属性,它就是S属性的
- L属性定义,适应于自顶向下的过程
- 这个属性是综合属性,或者
- 这个属性是继承属性,但是它的规则具有如下限制,即假设存在一个产生式A→X1X2…Xn,有一个通过这个产生式所关联的规则计算得到的继承属性Xi.a,则这个规则只能用:
- 和产生式左部A关联的继承属性
- 位于Xi左边的文法符号实例X1、X2、…、Xi-1相关的继承属性或综合属性
- 和这个Xi的实例本身相关的继承属性或综合属性,但是在有这个Xi的局部属性组成的依赖图中不存在环
S属性定义的,适合在自下而上分析过程中使用 L属性定义的,适合在自顶向下分析过程中使用
5.2 语法制导翻译方案
本课程主要关注如何用SDT实现两类重要的SDD
- 基本文法可以用LR分析,且SDD是S属性的
- 基本文法可以用LL分析,且SDD是L属性的
这章就多看多理解, 是一个实践性的章节.