逆波兰后缀式与语法制导翻译:编译原理详解

需积分: 36 11 下载量 85 浏览量 更新于2024-08-21 收藏 671KB PPT 举报
逆波兰表示法(后缀式),也称为后缀表达式,是一种在编译原理中常见的方法,其特点是运算符紧跟在其运算对象之后,消除了括号,保持了原始运算对象的顺序,并且简化了求值过程,适合用栈数据结构实现。在表达式 `a+b`、`a*b+c`、`a*(b+c/d)` 和 `a*b+c*d` 的例子中,后缀式形式分别对应为 `ab+`、`abc*+`、`abcd/*+` 和 `ab*cd*+`,最后一条还展示了赋值操作 `a:=b*c+d*e`,其后缀式形式为 `abc*de*+:="`。 第八章语法制导翻译法是编译程序中的一个重要环节,它在词法分析和语法分析之后进行,负责对源代码进行更深入的语义分析并生成中间代码。语法制导翻译的核心思想是在语法分析的过程中,根据每个产生式的语义子程序或规则执行翻译。本章的学习内容包括属性文法的应用、不同类型的中间代码形式、赋值语句、布尔表达式、控制语句和说明语句的翻译方法。 语义处理程序有两个关键功能:静态语义分析和真正的翻译。静态语义分析包括类型检查,确保程序结构的合法性,如检查变量类型是否匹配、控制流是否合理(如break语句的使用)、一致性(如标识符在同一作用域内是否唯一)以及相关名字的匹配(如Ada语言中的嵌套结构名称)。如果静态语义正确,编译器会进一步生成中间代码或目标代码。 属性文法是描述编程语言语义的重要工具,它在上下文无关文法的基础上,为每个文法符号(终结符和非终结符)附加相关的属性。这些属性通常代表与符号处理相关的额外信息,如类型信息、存储分配等。属性文法最初由Knuth在1968年提出,通过为文法规则添加属性,使得语义处理过程更加系统化和明确,有助于编译器的高效生成中间代码。 总结来说,逆波兰表示法和语法制导翻译是编译原理中的两个重要概念,它们在源代码处理的不同阶段发挥关键作用,特别是属性文法,作为一种强大的工具,帮助编译器理解和表达程序的深层语义。理解这些概念对于编写和优化现代编译器至关重要。