编译原理语义分析与中间代码生成
时间:2026-05-01
时间: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 ): 源程序的一种内部表示,不依赖目标机的结构,
易于机械生成目标代码的中间表示。
几种中间语言 后缀式(逆波兰表示法) 三地址代码
四元式 三元式 间接三元式 树
编译原理
长春工业大学计算机科学与工程学院
后缀式
表达式的一种表示形式 运算符直接跟在运算量后面 又称为逆波兰表示法
下一篇:公司员工聘用合同书