语法制导翻译和中间代码生成 词法分析和语法分析之后的语义分析和中间 代码生成,是编译第三、四阶段的工作。本 章介绍几种典型的中间代码形式,以及产生 它的算法。 中间代码的形式很多,如逆波兰记号、树 形表示、三元式、四元式。他们都是介于 单词流与目标指令之间的“中间产品
词法分析和语法分析之后的语义分析和中间 代码生成,是编译第三、四阶段的工作。本 章介绍几种典型的中间代码形式,以及产生 它的算法。 中间代码的形式很多,如逆波兰记号、树 形表示、三元式、四元式。他们都是介于 单词流与目标指令之间的“中间产品”
困难 解决办法 目前还不存在一种广 为每一个产生式配一个 泛接受的方式来描述 翻译子程序(语义子程 为典型程序语言产生 序、动作),在语法分 中间代码所需的邻语 析的同时执行它。这样, 言的动作。原因是代 配上语义动作之后,既 码生成依赖于对语义 指定了串的意义,同时 的解释,而语义的刻 又按这种意义规定了生 划的形式化系统尚未 成某种中间代码应作的 诞生。 基本动作
目前还不存在一种广 泛接受的方式来描述 为典型程序语言产生 中间代码所需的邻语 言的动作。原因是代 码生成依赖于对语义 的解释,而语义的刻 划的形式化系统尚未 诞生。 为每一个产生式配一个 翻译子程序(语义子程 序、动作),在语法分 析的同时执行它。这样, 配上语义动作之后,既 指定了串的意义,同时 又按这种意义规定了生 成某种中间代码应作的 基本动作
基本思想 是对上下文无关文法的一种扩充。对文法中的每一产生式 都附加一个“语义动作”或“语义子程序”,且在分析的 过程中,每当需要使用一个产生式进行推导(自上向下的 分析)或进行归约(自下而上的分析)时,语法分析程序 除执行相应的语法分析动作之外,同时也调用相应的语义 子程序,每一语义子程序都指明了相应产生式中各个符号 的具体含义,并确定了用该产生式进行分析时所采取的语 义动作(如传送信息、查填符号表、计算值以及产生中间 代码等)
基本思想 是对上下文无关文法的一种扩充。对文法中的每一产生式 都附加一个“语义动作”或“语义子程序”,且在分析的 过程中,每当需要使用一个产生式进行推导(自上向下的 分析)或进行归约(自下而上的分析)时,语法分析程序 除执行相应的语法分析动作之外,同时也调用相应的语义 子程序,每一语义子程序都指明了相应产生式中各个符号 的具体含义,并确定了用该产生式进行分析时所采取的语 义动作(如传送信息、查填符号表、计算值以及产生中间 代码等)
本章内容 ●属性文法 ●语法制导翻译 ·逆波兰表示法 ●三元式和树 ●四元式 ●简单算术表达式和赋值句到四元式的翻译 ●布尔表达式到四元式的翻译 ●控制语句的翻译 ●数组元素的引用 ●说明语句的翻译 ●自上而下分析制导翻译概说
⚫属性文法 ⚫语法制导翻译 ⚫逆波兰表示法 ⚫三元式和树 ⚫四元式 ⚫简单算术表达式和赋值句到四元式的翻译 ⚫布尔表达式到四元式的翻译 ⚫控制语句的翻译 ⚫数组元素的引用 ⚫说明语句的翻译 ⚫自上而下分析制导翻译概说
※回顾※ 语义分析是王什么的? 其任务是对语法分析所识别出的各类语法范畴,分析 其含义,并进行初步翻译。 包括两个方面的工作。 首先是对各种语法范畴进行静态语义检查,例如,变 量是否定义、类型是否正确等等。 如果语义正确,则进行中间代码的翻译。 ÷为什么我们需要属性文法? 因为语义分析依循的是语言的语义规则,通常使用属 性文法描述语义规则
※回顾※ ❖ 语义分析是干什么的? 其任务是对语法分析所识别出的各类语法范畴,分析 其含义,并进行初步翻译。 包括两个方面的工作。 首先是对各种语法范畴进行静态语义检查,例如,变 量是否定义、类型是否正确等等。 如果语义正确,则进行中间代码的翻译。 ❖ 为什么我们需要属性文法? 因为语义分析依循的是语言的语义规则,通常使用属 性文法描述语义规则