资源描述:
《语法制导翻译生成中间代码.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第四章语法制导翻译生成中间代码语法制导翻译是处理语义的基本方法,它以语法分析为基础,在语法分析得到语言结构的结果时,对附着于此结构的语义进行处理,如计算表达式的值、生成中间代码等。与语法分析部分的讨论不同,本章的内容更注重于实际方法的讨论。主要内容包括:<1>语法制导翻译的基本概念<2>中间代码简介<3>符号表简介<4>典型声明语句与可执行语句的翻译14.1语法制导翻译简介4.1.1语法与语义<1>语法与语义的关系语法是指语言的结构、即语言的“样子”;语义是指附着于语言结构上的实际含意,即语言的“意义”。对于语法和语义:语
2、义不能离开语法独立存在;语义远比语法复杂;同一语言结构可以包含多种含意,不同语言结构表示相同含意;语法与语义之间没有明确的界线。例1:猫吃老鼠与老鼠吃猫例2:程序设计语言中的分情况结构:1.caseconditioniscase1:stat1;case2:stat2;...endcase;2.switch(condition){casecondition1:stat1;casecondition2:stat2;...}break;break;24.1.1语法与语义(续1)<2>语义分析的两个作用检查是否结构正确的句子所表示
3、的意思也合法;执行规定的语义动作,如:表达式求值符号表填写中间代码生成等<3>语义分析的方法语法制导翻译(2004年3月31日在此结束)34.1.2属性与语义规则<1>语法制导翻译的基本思想通俗地讲:以语法分析为基础,伴随语法分析的各个步骤,执行相应的语义动作。具体方法:1.将文法符号所代表的语言结构的意思,用附着于该文法符号的属性表示;2.用语义规则规定产生式所代表的语言结构之间的关系(即属性之间的关系),即用语义规则实现属性计算。语义规则的执行:在语法分析的适当时刻(如推导或归约)执行附着在对应产生式上的语义规则,以实
4、现对语言结构语义的处理,如计算、查填符号表、生成中间代码、发布出错信息等。44.1.2属性与语义规则(续1)<2>属性的抽象表示.attr例如:E.val(值)E.type(类型)E.code(代码序列)E.place(存储空间)<3>对文法的约定本章关注的是语法分析的基础上的语义处理,忽略语法分析。为了简单,本章的文法一般为二义文法。默认解决二义的方法是规定常规意义下的优先级和结合性。54.1.2属性与语义规则(续2)<3>属性的定义**定义4.1对于产生式A→α,其中α是由文法符号X1X2...Xn组成的序列,它的语义
5、规则可以表示为(4.1)所示关于属性的函数:b:=f(c1,c2,...,ck)(4.1)语义规则中的属性存在下述性质与关系。(1)若b是A的属性,c1,c2,...,ck是α中文法符号的属性,或者A的其它属性,则称b是A的综合属性。(2)若b是α中某文法符号Xi的属性,c1,c2,...,ck是A的属性,或者是α中其它文法符号的属性,则称b是Xi的继承属性。(3)称(4.1)中属性b依赖于属性c1,c2,...,ck。(4)若语义规则的形式如下述(4.2),则可将其想像为产生式左部文法符号A的一个虚拟属性。属性之间的依赖
6、关系,在虚拟属性上依然存在。f(c1,c2,...,ck)(4.2)■(4.1)中属性之间的依赖关系,实质上反映了属性计算的先后次序,即所有属性ci被计算之后才能计算属性b。E→E1+E2E.val:=E1.val+E2.valE→E1+E2print(E.val)64.1.3语义规则的两种形式<1>语法制导定义用抽象的属性和运算符号表示的语义规则;(公式,做什么)<2>翻译方案用具体属性和运算表示的语义规则。(程序段,如何做)语义规则也被习惯上称为语义动作。忽略实现细节,二者作用等价。(设计与实现)7例4.1将中缀形式的
7、算术表达式转换为后缀表示的语法制导定义和翻译方案。虚拟属性print(E.post)可想象为L.p:=print(E.post)。产生式L→EE→E1+E2E→num语法制导定义print(E.post)E.post:=E1.post
8、
9、E2.post
10、
11、'+';E.post:=num.lexval;翻译方案1print_post(post);post(k):='+';k:=k+1;post(k):=lexval;k:=k+1;翻译方案中需要考虑的问题:1.采用什么样的语法分析方法;2.为属性分配存储空间;3.考虑计算次序
12、。产生式翻译方案2L→EE→E1+E2print(+);E→numprint(lexval);语法制导定义-算法翻译方案-程序实现,多种方法翻译方案1,自下而上计算,LR分析。(以3+5+8为例,归约时翻译)post:(35+8+)84.1.3语义规则的两种形式(续2)<3>属性作为分析树的注释将属性附