第六章 属性文法和语法制导翻译
本章主要掌握下面一些内容。
1.语义规则的两种描述方法:语法制导的定义和翻译方案。语法制导的定义没有指明语义规则的计算次序,而翻译方案显式给出语义规则( 或叫语义动作)的计算次序和位置。
2.综合属性,继承属性
3.综合属性定义(S属性定义)和L属性定义。
4.设计简单问题的语法制导定义和翻译方案,这是本章的重点和难点。这种设计可看成是一种程序设计,是一种事件驱动形式的程序设计,因此它比一般的编程要 难得多。这里的事件是句子中各种语法结构的识别。
1.1 语法制导的定义
语法制导翻译:通过给语法树上各个符号赋予一定的含义 并且将各个符号进行有结构的连接,可以形成语言的具 体语句的含义。这给予我们以启示:可以通过扩充文法, 在文法符号上附着某些语义信息,并在这些语义信息间建 立相互计算关系,从而在语法分析的同时进行语义分析。 由于这种分析是在语法分析的控制下进行的,故称为语法 制导翻译
1.2 翻译方案
2.1 综合属性
• 综合属性:用于自下而上传递信息;在语法树中,一个结点的综合属性由其子 结点的属性值确定,因此,通常使用自底向上的方法在每一个结点处使用语义规 则计算综合属性的值。仅仅使用综合属性的属性文法称S-属性文法。
2.2 继承属性
继承属性:用于自上而下传递信息;在语法树中,一个结点的继承属性由此结 点的父结点和/或兄弟结点的某些属性确定
2.3注释分析树
3.1 S属性文法
S-属性文法的自下而上计算
3.1 L属性文法
在语法分析过程中进行语义分析和翻译,属性的计算 顺序受到语法分析建立分析树结点顺序的限制。一种 自然的计算属性的顺序是按深度优先访问分析树结点 的顺序,它适应多种自底向上和自顶向下的翻译方法。 L-属性文法可用按深度优先顺序计算属性值。
翻译模式
自顶向下的翻译
关于左递归翻译模式更一般化的讨论
4.1 从翻译模式中去掉嵌入在产生式中 间的动作
4.2 模拟继承属性的计算
思想:通过引进新的非终结符和相应的ε产生式,将 新的文法符号插入到某些产生式中去,使得在文法在翻译 过程中可以按继承属性的计算方法来处理。也就是在分析 过程中文法符号的属性值在分析栈是确定的。
4.3 用综合属性代替继承属性
对基础文法进行等价改变,避免使用文法符号的继承属 性.