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

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

16.1中间语言

中间语言的特点和作用

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

16.2 常用的中间语言

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

16.2.1 后缀式

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

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

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

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

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

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

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

16.2.2 图表示法

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

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

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

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

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

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

16.3 三地址代码

三地址代码 x:=y op z

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

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

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

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

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

优化一棵公用子树

三地址语句的种类

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

三地址语句——四元式

笔记-编译原理-第16、17、18、19章-语义分析与中间代码生成_第11张图片
通过引用语句的位置来简化:
笔记-编译原理-第16、17、18、19章-语义分析与中间代码生成_第12张图片

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

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

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

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

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

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

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,…

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

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

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

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

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

17.2 数组元素引用的翻译

17.2.1 数组元素的引用

数组元素地址的计算 :

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

数组元素地址计算:

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

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

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

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

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

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

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

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

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

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

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

17.3 类型转换

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

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

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

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

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

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

18.1 布尔表达式及其计算

18.1.1 布尔表达式的简介

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

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

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

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

18.2 按数值表示法翻译

18.2.1 数值表示法

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

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

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

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

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

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

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

18.3 带优化翻译布尔表达式

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

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

条件语句的翻译

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

18.3.2 布尔表达式的属性文法

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

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

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

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

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

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

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

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

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

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

18.3.4 布尔表达式的翻译

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

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

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

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

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

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

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

布尔表达式的文法

  • E → E1or E2
  • E → E1and E2

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

布尔表达式的翻译模式:

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

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

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

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

笔记-编译原理-第16、17、18、19章-语义分析与中间代码生成_第62张图片
按照本节所讲的一遍扫描的翻译模式工作,当一个布尔表达式规约分析翻译完成时,该布尔表达式生成的所有四元式都是完整的,没有需要回填的四元式。(错)
笔记-编译原理-第16、17、18、19章-语义分析与中间代码生成_第63张图片

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

19.1 常用的控制语句

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

19.2 控制语句的属性文法

19.2.1 if语句的属性文法

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

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

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

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

19.2.2 while语句的属性文法

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

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

19.3 控制语句的属性计算

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

你可能感兴趣的:(笔记,编译原理,编程语言,编译原理)