笔记-编译原理-第16、17、18、19章-语义分析与中间代码生成

    技术2022-07-11  85

    十六讲-语义分析与中间代码生成一

    16.1中间语言

    中间语言的特点和作用

    16.2 常用的中间语言

    后缀式,逆波兰表示图表示:抽象语法树(AST)、有向无环图(DAG)三地址代码 三元式 四元式 间接三元式

    16.2.1 后缀式

    将表达式翻译成后缀式的属性文法

    中缀表达式翻译成后缀式的翻译模式

    以上为 a+b+c 翻译成后缀式的例子

    16.2.2 图表示法

    抽象语法树(AST)有向无环图(DAG)

    抽象语法树vs. 有向无环图

    赋值语句翻译成抽象语法树的属性文法

    16.3 三地址代码

    三地址代码 x:=y op z

    三地址代码可以看成是抽象语法树或有向无环 图的一种线性表示

    抽象语法树vs. 三地址代码

    有向无环图vs. 三地址代码

    优化一棵公用子树

    三地址语句的种类

    x:=yopzx:=opy 、x:=ygoto LifxrelopygotoL或ifagotoL传参、转子:paramx、callp,n返回语句:returny索引赋值:x:=y[i]、x[i]:=y地址和指针赋值:x:=&y、x:=*y、*x:=y

    三地址语句——四元式

    通过引用语句的位置来简化:

    =======

    三地址语句——间接三元式

    三元式表+间接码表间接码表一张指示器表,按运算的先后次序列出有关三元式 在三元式表中的位置优点 方便优化,节省空间

    十七讲-语义分析与中间代码生成二

    17.1 赋值语句的翻译

    17.1.1 简单算术表达式及赋值语句

    赋值语句的形式 id:=E赋值语句的意义(功能) 对表达式E求值并置于变量T中 、id.place:=T

    17.1.2 赋值语句生成三地址代码的S-属性文法

    非终结符号S有综合属性S.code,它代表赋值 语句S的三地址代码非终结符号E有两个属性 E.place表示存放E值的单元的名字(地址)E.code表示对E求值的三地址语句序列 函数newtemp的功能是,每次调用它时,将返 回一个不同的临时变量名字,如T1,T2,…

    17.1.3 产生赋值语句三地址代码的翻译模式

    17.2 数组元素引用的翻译

    17.2.1 数组元素的引用

    数组元素地址的计算 :

    X:=A[i 1,i2,…,ik]+YA[i1,i2,…,ik]:=X+Y

    数组元素地址计算:

    17.2.2 带数组元素引用的赋值语句

    带数组元素引用的赋值语句翻译模式

    17.3 类型转换

    产生式E→E1+E2 的语义动作

    十八讲-语义分析与中间代码生成三

    18.1 布尔表达式及其计算

    18.1.1 布尔表达式的简介

    文法 E → E orE | E and E | notE | (E) | iropi| i用途 用于逻辑演算,计算逻辑值 用于控制语句的条件式

    18.2.1 计算布尔表达式的两种方法

    18.2 按数值表示法翻译

    18.2.1 数值表示法

    18.2.2 关于布尔表达式的数值表示法的翻译模式

    18.3 带优化翻译布尔表达式

    18.3.1 作为条件控制的布尔式翻译

    条件语句的翻译

    18.3.2 布尔表达式的属性文法

    产生布尔表达式三地址代码的属性文法

    语义函数newlabel,返回一个新的符号标号对于一个布尔表达式E,设置两个继承属性 E.true是E为‘真’时控制流转向的标号E.false是E为‘假’时控制流转向的标号 E.code记录E生成的三地址代码序列

    18.3.3 根据属性文法翻译布尔表达式

    18.3.4 布尔表达式的翻译

    18.3.5 布尔表达式的一遍扫描翻译模式

    布尔表达式的文法

    E → E1or E2E → E1and E2

    布尔表达式的翻译模式:

    按照本节所讲的一遍扫描的翻译模式工作,当一个布尔表达式规约分析翻译完成时,该布尔表达式生成的所有四元式都是完整的,没有需要回填的四元式。(错)

    十九讲-语义分析和中间代码生成四

    19.1 常用的控制语句

    S → if E then S1S → if E then S1else S2S → while E do S1其中E为布尔表达式

    19.2 控制语句的属性文法

    19.2.1 if语句的属性文法

    19.2.2 while语句的属性文法

    19.3 控制语句的属性计算

    (建议这章的内容看视频,,,推导过程太多了。。

    Processed: 0.010, SQL: 9