编译原理--03 语法制导翻译和中间代码生成复习(清华大学出版社第3版)

前言 目录
01 文法和语言、词法分析复习  
02 自顶向下、自底向上的LR分析复习  
03 语法制导翻译和中间代码生成复习  
04 符号表、运行时存储组织和代码优化复习  
05 用C++手撕PL/0  
第7章 语法制导的语义计算

语义分析是上下文有关的,目前较为常见的是用属性文法来描述程序语言语义,并采用语法制导翻译的方法完成对语法成分的翻译工作。

属性文法

属性 描述文法符号的类型、值等有关的一些信息,它可以被计算或传递。

语义动作 指产生式相关联的指定操作

条件谓词 指产生式关联的接受条件,或者根据该条件谓词决定做什么语义动作

语义规则集 通常是产生式关联的一组语义规则,每个语义规则可以是一个语义动作或条件谓词。

属性\(att\)可以与某个文法符号\(a\)关联,用\(a.att\)来表示这种关联

现有一文法:
\(E\rightarrow T_1 + T_2\mid T_1 \&\& T_2\)
\(T\rightarrow num\mid true\mid false\)

将上面的文法描述为类型检查的属性文法:
\(E\rightarrow T_1 + T_2 \quad \{T_1.type=int\quad\&\&\quad T_2.type=int\}\)
\(E\rightarrow T_1 \&\& T_2\quad\{T_1.type=bool\quad\&\&\quad T_2.type=bool\}\)
\(T\rightarrow num\quad\{T.type=int\}\)
\(T\rightarrow true\quad\{T.type=bool\}\)
\(T\rightarrow false\quad\{T.type=bool\}\)

综合属性和继承属性

对关联于产生式\(A\rightarrow \alpha\)的语义动作\(b:=f(c_1, c_2, ..., c_k)\),如果\(b\)是A的某个属性,则b是A的一个综合属性。综合属性是自底向上传递信息。

对关联于产生式\(A\rightarrow \alpha\)的语义动作\(b:=f(c_1, c_2, ..., c_k)\),如果\(b\)是产生式右边某个文法符号X的某个属性,则b是A的一个继承属性。继承属性是自顶向下传递信息。

带标注语法分析树,即在语法树的基础上,将原来的非终结符结点修改为综合属性的赋值。

下面是一个简单表达式文法G[S]的一个仅含综合属性的属性文法(开始符号为S)
\(S\rightarrow E\quad\{print(E.val)\}\)
\(E\rightarrow E_1+T\quad\{E.val:=E_1.val+T.val\}\)
\(E\rightarrow T\quad\{E.val:=T.val\}\)
\(T\rightarrow T_1*F\quad\{T.val:=T_1.val\times F.val\}\)
\(T\rightarrow F\quad\{T.val:=F.val\}\)
\(F\rightarrow (E)\quad\{F.val:=E.val\}\)
\(F\rightarrow d\quad\{F.val:=d.lexval\}\)

其中\(d.lexval\)表示数值,\(E.val, T.val, F.val\)都为综合属性
现在要给表达式\(3*(5+4)\)构造语法树和带标注语法分析树:

编译原理--03 语法制导翻译和中间代码生成复习(清华大学出版社第3版)

编译原理--03 语法制导翻译和中间代码生成复习(清华大学出版社第3版)

下面则是一个包含综合属性、继承属性的属性文法:
\(E\rightarrow TR\quad\{R.in:=T.val;\quad E.val:=R.val\}\)
\(R\rightarrow +TR_1\quad\{R_1.in:=R.in+T.val;\quad R.val:=R_1.val\}\)
\(R\rightarrow -TR_1\quad\{R_1.in:=R.in-T.val;\quad R.val:=R_1.val\}\)
\(R\rightarrow \varepsilon\quad\{R.val := R.in\}\)
\(T\rightarrow num\quad\{T.val := lexval(num)\}\)
其中\(lexval(num)\)表示从词法分析程序得到的常数值。
可见\(E.val, T.val, R.val\)都为综合属性,\(R.in\)为继承属性
现在要给表达式\(3+4-5\)构造语法树和带标注语法分析树:

编译原理--03 语法制导翻译和中间代码生成复习(清华大学出版社第3版)

编译原理--03 语法制导翻译和中间代码生成复习(清华大学出版社第3版)

这一章可能的考点

了解综合属性和继承属性。已知属性文法和输入符号串,构建语法树和带标注语法分析树。

第8章 静态语义分析和中间代码生成 中间代码生成

中间代码 一种介于源语言目标语言的中间语言形式,有:

逆波兰表示

三元式表示

四元式表示

树形表示

逆波兰表示

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zggjzx.html