语法制导翻译和中间代码

语法制导翻译和中间代码

ID:46574955

大小:490.50 KB

页数:74页

时间:2019-11-25

语法制导翻译和中间代码_第1页
语法制导翻译和中间代码_第2页
语法制导翻译和中间代码_第3页
语法制导翻译和中间代码_第4页
语法制导翻译和中间代码_第5页
资源描述:

《语法制导翻译和中间代码》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第8章语法制导翻译和中间代码生成教学目的:[1]掌握语法制导翻译基本原理。[2]了解自上而下分析制导翻译基本思想和实现方法。[3]掌握几种常用的中间代码:四元式、三元式、逆波兰表示。[4]掌握简单表达式的中间代码生成。教学重点:语法制导翻译基本思想、中间代码的形式、布尔表达式的翻译与控制结构的翻译;布尔表达式与控制结构的语义过程。本章内容8.1属性文法8.2语法制导翻译概论8.3中间代码的形式8.4简单赋值语句的翻译8.5布尔表达式的翻译8.6控制结构的翻译8.7说明语句的翻译8.8数组和结构的翻译符号表编译程序的任务是将汇编语言或高级语言书写成的源程序转换成等价的目标代码程序。其中要求目标代

2、码程序和源程序的语义(Semantics)必须相同。什么是语义?程序的语义就是它的“意思”。语义分析的任务包括两方面:一个是静态语义检查;一个是动态语义的解释执行(通俗地说就是计算并生成中间代码。8.1属性文法一、静态语义分析或静态语义审查语义分析的工作:包括:(1)类型检查。根据类型相容性要求,验证程序中执行的每个操作是否遵守语言的类型系统的过程,编译程序必须报告不符合类型系统的信息。(2)控制流检查。控制流语句必须使控制转移到合法的地方。例如,在C语言中break语句使控制跳离包括该语句的最小while、for或switch语句。如果不存在包括它的这样的语句,则报错。(3)一致性检查。(4

3、)上下文相关性检查。比如,变量名字必须先声明后引用;(5)名字的作用域分析例例1、各种条件表达式的类型是不是boolean型?2、运算符的分量的类型是否相容?3、赋值语句的左右部的类型是否相容?4、形参和实参的类型是否相容?5、下标表达式的类型是否为所允许的类型?6、函数说明中的函数类型和返回值的类型是否一致?1、每个使用的标识符是否都有声明?在同层内有无标识符被声明多次?【例如】Pascal语言规定同一标识符在一个分程序中只能被说明一次,同一case语句的标号不能相同,枚举类型的元素不能重复出现等等。2、标号是否有声明?有无重复声明和重复定位错误?有无非法转入错误?3、子界类型中的下界和上界

4、类型是否相容?下界是否小于等于上界?二、动态语义处理如果静态语义正确,语义处理则执行真正的翻译(动态语义)即:生成程序的一种中间表示形式或生成实际的目标代码。中间代码(中间语言)是介于源语言和机器语言的一种表示形式。通常语义分析生成中间代码的原因:便于移植:中间代码相对独立于目标机,在编译程序移植时编译前端保持不变。利于优化:将优化分为与目标机无关的中间代码优化,以及与目标机相关的目标代码的优化,使优化更加细致有效。语义分析的整个过程和词法及语法分析相类似。例如,在语法分析中,使用BackusNaus范式(BNF)中的上下文无关文法描述语法结构,并用各种自顶向下和自底向上的分析算法实现语法结构

5、。由于没有标准的方法(如BNF)来说明语言的静态语义,因此语义分析就没有这么简单。常采用属性文法(attributegrammar)来描述语义。语义的形式化描述8.1属性文法一、属性(Attribute)属性翻译文法是在上下文无关文法的基础上,为每个文法符号(终结符或非终结符)配备若干相关的“值”(称为属性)。属性代表与文法符号相关信息,例如它的类型、值、代码序列、符号表内容等等。属性与变量一样,可以进行计算和传递。属性加工的过程即是语义处理的过程。对于文法的每个产生式都配备了一组属性的计算规则,称为语义规则。二、属性文法(AttributeGrammar)的定义一个属性文法是一个三元组A=(

6、G,V,F),其中:G为一上下文无关文法。V为属性的有穷集。F是关于属性的断言或一组属性的计算规则(称为语义规则)。属性文法的表示分两部分:首先在上下文无关文法中,对于每个文法符号引进相关的属性符号;其次对于每个产生式写出计算属性值的计算规则(即语义规则),来描述各属性间的关系。形式为:文法规则语义规则规则1相关的属性等式....规则n相关的属性等式【例】用属性文法表示简单的无符号整数文法:number→numberdigit

7、digitdigit→0

8、1

9、2

10、3

11、4

12、5

13、6

14、7

15、8

16、9【分析】一个数最重要的属性是它的值,将其命名为val。每个数字都有一个值,可以用它表示的实际数直接计算。1、

17、文法规则:digit→0语义规则:digit.val=02、文法规则:number→digit语义规则:number.val=digit.val。3、文法规则number→numberdigit,必须表示出这个文法规则左边符号的值和右边符号的值之间的关系。通过使用下标进行区分,将文法写成如下形式:number1→number2digit语义规则:number1.val:=number2.val*1

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。