设计递归下降翻译器:属性文法与语法制导

需积分: 50 1 下载量 151 浏览量 更新于2024-08-14 收藏 1.11MB PPT 举报
递归下降翻译器的设计是编译原理中的一个重要概念,它是一种自上而下的翻译策略,特别适用于处理那些易于定义解析规则的语言。PASCAL语言函数的典型形式展示了这种设计的核心思想,即通过一系列步骤逐步解析和计算函数的各个部分。 在第六章,讨论的主题转向了属性文法和语法制导翻译。属性文法是Knuth在1968年提出的一种扩展的文法模型,用于表示编译器对语法结构的理解和处理。在这个框架中,每个文法符号被赋予了特定的属性,这些属性反映了与符号相关的重要信息,如数据类型、操作结果等。属性分为综合属性和继承属性,前者是自下而上地计算,后者则是自上而下的传递。 属性文法规则以b=f(c1, c2, ..., ck)的形式给出,这里的b可能是综合属性,依赖于子节点的属性值,或者b是继承属性,取决于父节点或兄弟节点的属性。对于上下文无关文法,引入属性并为每个产生式分配语义规则是创建属性文法的关键步骤。例如,对于表达式求值,属性文法会规定终结符的属性值由词法分析器提供,而非终结符则可能涉及综合属性和继承属性的结合。 属性文法的特点在于其封装性,即每个产生式的计算规则仅限于左部的综合属性或右部的继承属性,且规则中只能使用当前产生式内文法符号的属性。语义规则不仅用于属性计算,还涵盖静态语义检查、符号表操作和代码生成等任务,如给出的例6.1所示,通过属性文法,表达式的求值过程可以逐步展开并得到实际的值。 总结来说,递归下降翻译器设计和属性文法是编译原理中的两个关键概念,它们通过自上而下的方式,通过属性的计算和传递,实现了对源代码的深入理解和转换,是实现语法分析和目标代码生成的重要工具。