【编译原理笔记13】中间代码生成:控制流语句及其SDT,布尔表达式及其SDT,控制流翻译的例子 |
您所在的位置:网站首页 › c语言或语句短路原理 › 【编译原理笔记13】中间代码生成:控制流语句及其SDT,布尔表达式及其SDT,控制流翻译的例子 |
本次笔记内容: 6-5 控制流语句SDT 6-6 布尔表达式SDT 6-7 控制流的栗子 本节课幻灯片,见于我的 GitHub 仓库:第13讲 中间代码生成_3.pdf 文章目录 控制流语句及其SDT控制流语句的基本文法控制流语句的代码结构控制流语句的SDTif-then-else语句的SDTif-then语句的SDTwhile-do语句的SDT 布尔表达式及其SDT布尔表达式的基本文法布尔表达式的SDTB → B1 or B2 的 SDTB → B1 and B2 的 SDT 控制流翻译的例子控制流语句的SDTSDT的通用实现方法例 控制流语句及其SDT 控制流语句的基本文法 P → S P\to S P→S P → S 1 S 2 P\to S_1S_2 P→S1S2 S → id = E ; ∣ L = E ; S\to \text{id}=E; | L=E; S→id=E;∣L=E; S → if B then S 1 ∣ if B then S 1 else S 2 ∣ while B do S 1 S\to \text{if}\; B\; \text{then} S_1 |\; \text{if}\; B \;\text{then}\; S_1 \; \text{else}\; S_2\; |\; \text{while}\; B\; \text{do}\; S_1 S→ifBthenS1∣ifBthenS1elseS2∣whileBdoS1如上,可对应程序的顺序结构、分支结构、循环结构。 控制流语句的代码结构
继承属性: S.next:是一个地址,该地址中存放了紧跟在S代码之后的指令(S的后继指令)的标号B.true:是一个地址,该地址中存放了当B为真时控制流转向的指令的标号B.false:是一个地址,该地址中存放了当B为假时控制流转向的指令的标号B.true 与 B.false 为 B 的两个出口。 用指令的标号标识一条三地址指令。 控制流语句的SDT
在跳转代码中,逻辑运算符&&、||和!被翻译成跳转指令。运算符本身不出现在代码中,布尔表达式的值是通过代码序列中的位置来表示的。
而在产生式右部中,有含有内嵌的语义动作,因此,要想在自底向上的分析中进行翻译,需要修改这个文法。引入一些标记非终结符。 SDT的通用实现方法任何SDT都可以通过下面的方法实现: 首先建立一棵语法分析树,然后按照从左到右的深度优先顺序来执行这些动作。 例
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |