编译原理语义分析与中间代码生成

时间:2026-05-01

编译原理

长春工业大学计算机科学与工程学院

语义分析与中间代码生成

复习:编译程序的逻辑过程 按照编译程序的逻辑工作过程,语法分析后,接下来就要进 行语义分析了,语义分析后,再生成中间代码。实际应用中, 往往在语法分析的同时,进行语义分析并生成中间代码,这 就是语法制导翻译法。 语法制导翻译过程中,需要借助于属性文法进行语义描述和 语义处理。 本章内容: 属性文法有关概念; 语法制导翻译基本思想; 中间代码形式; 简单算术表达式、布尔表达式、赋值语句、条件语句、循环语句的翻

译。

编译原理

长春工业大学计算机科学与工程学院

属性文法表达式文法 E—>T+T | T or T T—>n | b E T1 + T2 { T1.type = int T2.type= T1.type E.type =int} E T1 or T2 { T1.type = bool T2.type= T1.type E.type =bool} T n { T.type = int} T b { T.type = bool}

编译原理

长春工业大学计算机科学与工程学院

属性文法对于某个压缩了的文法,当把每个文法符 号和一组属性相关联,并把产生式附加以 语义规则的时候,就得到属性文法。 语法制导的翻译过程:由于属性文法的规 则和产生式是一一对应的关系,所以,由 属性文法确定的语义分析可以在语法分析 的过程中进行。这个过程称为语法制导的 翻译。

编译原理

长春工业大学计算机科学与工程学院

属性文法(attribute grammar) A=(G,V,F),其中 G:一个CFG, 属性文法的基础。 V:有穷的属性集 每个属性与一个文法符号相关联 这些属性代表与文法符号相关的语义信息

如类型、地址、值、代码、符号表内容等等 属性与变量一样,可以进行计算和传递 属性加工的过程即是语义处理的过程 属性加工与语法分析同时进行 属性的表示: 标识符(或数),写在相应文法的下边 点记法:E.Val,E.Place,E.Type… F:关于属性的属性断言或一组属性的计算规则(称为语义规 则) . 断言或语义规则与一个产生式相联,只引用该产生式左 端或右端的终结符或非终结符相关的属性.

编译原理

长春工业大学计算机科学与工程学院

语义规则描述的工作属性计算 静态语义检查 符号表操作 代码生成

编译原理

长春工业大学计算机科学与工程学院

继承属性和综合属性

两类属性: 综合属性(Synthesized Attribute):归约型属性

用于“自下而上”传递信息 用于“自上而下”传递信息。

继承属性(Inherited Attribute):推导型属性

属性的计算:A X1 X2 …Xn A的综合属性,计算 S(A) =f(A(X1),…A(Xn)) Xj的继承属性,计算 I(Xj)=f(A(A),... A(Xn))

文法符号属性的

说明: 非终结符既可有综合属性也可有继承属性,但文法开始符号没有

继承属性. 终结符只有综合属性.

通常规定:文法符号的综合属性与继承属性无交。

编译原理

长春工业大学计算机科学与工程学院

综合属性的例子 非终结符E、T及F都有一个

产 生 式

语 义 规 则

Print(E.val) L→ E E →E1+T E.val=E1.val+T.val E→T E.val=T.val T →T1 * F T.val=T1.val F.val T→F T.val=F.val F→(E) F.val=E.val F→digit F.val=digit.lexval

综合属性val,符号digit有一 个综合属性,它的值由词 法分析器提供。 与产生式L→E对应的语义

规则仅仅是打印由E产生的 算术表达式的值的一个过 程,可认为这条规则定义 了L的一个虚属性。 某些非终结符加上标是为

了区分一个产生式中同一 非终结符多次出现

编译原理

长春工业大学计算机科学与工程学院

综合属性的自下而上定值设表达式为3*5+4,则语义动作打印数值19LE.val=19 E.val=15+

T.val=4 F.val=4

T.val=15

T.val=3*

F.val=5digit.lexval=4 digit.lexval=5

F.val=3 digit.lexval=3

3*5+4的带注释的分析树

编译原理

长春工业大学计算机科学与工程学院

继承属性的例子继承属性L.in 产 生式 D TL T int T real 语 义 规 则

L.in=T.type T.type=integer T.type=real L1.in=L.in L L1,id addtype(id.entry,L.in) L id addtype(id.entry,L.in)

编译原理

长春工业大学计算机科学与工程学院

继承属性的自上而下定值Real id1,id2,id3D T.type=real real L.in= real L.in= real , id3

,L.in= real id1 id2

编译原理

长春工业大学计算机科学与工程学院

语法制导翻译的基本思想

为每条产生式配上一个翻译子程序(称为语义动作 或语义子程序); 语义动作的工作 指明符号串的意义; 按照这种意义规定了对应的动作:

查添各种表格 改变变量之值 诊察与报告源程序错误 产生中间代码…

在语法分析的同时,当一个产生式获得匹配(对于 自上而下分析)或用于归约(对于自下而上分析) 时,就执行相应产生式的语义子程序。

编译原理

长春工业大学计算机科学与工程学院

中间代码

中间代码(Intermediate code ): 源程序的一种内部表示,不依赖目标机的结构,

易于机械生成目标代码的中间表示。

几种中间语言 后缀式(逆波兰表示法) 三地址代码

四元式 三元式 间接三元式 树

编译原理

长春工业大学计算机科学与工程学院

后缀式

表达式的一种表示形式 运算符直接跟在运算量后面 又称为逆波兰表示法

定义:设E是 …… 此处隐藏:81字,全部文档内容请下载后查看。喜欢就下载吧 ……

编译原理语义分析与中间代码生成.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:4.9 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:19元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219