




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第八章语法制导翻译和中间代码生成第八章语法制导翻译和中间代码生成8.1概述概述8.2属性文法和语法制导翻译属性文法和语法制导翻译8.3中间代码中间代码概述概述 语义处理语义处理 程序设计程序设计 语言的语义语言的语义 u静态语义是对程序约束的描述,这些约束无法通过抽象静态语义是对程序约束的描述,这些约束无法通过抽象语法规则来妥善地描述,实质上就是语法规则的良形式语法规则来妥善地描述,实质上就是语法规则的良形式条件,它可以分为类型规则和作用域条件,它可以分为类型规则和作用域/可见性规则两大类可见性规则两大类 类型相容性类型相容性 变量先声明后引用变量先声明后引用 名称相关要求名称相关要求 动态语
2、义动态语义 程序单位描述的计算程序单位描述的计算u编译程序的语义处理工作编译程序的语义处理工作 静态语义审查静态语义审查 解释执行动态解释执行动态语义(计算)生成代码语义(计算)生成代码.语语 法法 分分 析析 后后 的的 源源 程程 序序 语义处理语义处理概述概述语义形式化语义形式化 语义建模语义建模u文法模型文法模型- 属性文法属性文法u命令式或操作式模型命令式或操作式模型 - 操作语义学操作语义学u应用式模型应用式模型-指称语义学指称语义学u公理式模型公理式模型-公理语义学公理语义学操作语义学操作语义学u操作语义学,是操作语义学,是形式语义学形式语义学的一个分支。的一个分支。程序程序设计
3、语言设计语言的实施是在具体的的实施是在具体的计算机系统计算机系统中按照中按照语言的语义编制语言的语言的语义编制语言的翻译程序翻译程序,将语言中各,将语言中各个成分翻译成计算机系统中相应的一组操作。个成分翻译成计算机系统中相应的一组操作。语言在计算机系统中的一种实施一旦完成,那语言在计算机系统中的一种实施一旦完成,那么对这个计算机系统而言,语言各个成分的含么对这个计算机系统而言,语言各个成分的含义也就完全确定了。因此语言的实施也可用来义也就完全确定了。因此语言的实施也可用来定义语言的语义,即将语言成分所对应的计算定义语言的语义,即将语言成分所对应的计算机系统的操作作为语言成分的语义,这种语义机系
4、统的操作作为语言成分的语义,这种语义被称作操作语义。由于语言的语义应该是标准被称作操作语义。由于语言的语义应该是标准的,不应依附于一个特定的计算机和一种具体的,不应依附于一个特定的计算机和一种具体的实施,因此操作语义学是用解释执行程序的的实施,因此操作语义学是用解释执行程序的抽象的机器来定义语言的语义。抽象的机器来定义语言的语义。指称语义学指称语义学(denotational semantics)u形式语义学的一个分支。人们用程序设计语言编制程序形式语义学的一个分支。人们用程序设计语言编制程序,命令计算机系统去加工数据。不同的计算机系统有不同的,命令计算机系统去加工数据。不同的计算机系统有不同
5、的结构,因此对同一个命令的执行过程可以不同,但最终效果结构,因此对同一个命令的执行过程可以不同,但最终效果应该相同。指称语义学方法认为不应该将程序设计语言中各应该相同。指称语义学方法认为不应该将程序设计语言中各个成分的执行过程计入语言成分的语义中。语言成分的语义个成分的执行过程计入语言成分的语义中。语言成分的语义,应该是执行语言成分所要得到的最终效果。这是语言成分,应该是执行语言成分所要得到的最终效果。这是语言成分所要表达的含义,是语言成分本身所固有的,不因计算机系所要表达的含义,是语言成分本身所固有的,不因计算机系统的不同而改变。执行语言成分产生的最终效果被看作是语统的不同而改变。执行语言成
6、分产生的最终效果被看作是语言成分的所指,称作为语言成分的指称物。这种语义学以语言成分的所指,称作为语言成分的指称物。这种语义学以语言成分的指称物作为语言成分的语义,故名为指称语义学。言成分的指称物作为语言成分的语义,故名为指称语义学。u指称语义学中用于定义语义的指称物多数是传统的数学指称语义学中用于定义语义的指称物多数是传统的数学对象,如整数、集合、映象等,故早期又称为数学语义学。对象,如整数、集合、映象等,故早期又称为数学语义学。这一名称容易使人误认为其他形式语义学分支是非数学的,这一名称容易使人误认为其他形式语义学分支是非数学的,后已不再使用。后已不再使用。 公理语义学公理语义学u形式语义
7、学的一个分支。不同的人在了形式语义学的一个分支。不同的人在了解程序的含义时有不同的要求。公理语解程序的含义时有不同的要求。公理语义学方法就是研究如何将这些不同的要义学方法就是研究如何将这些不同的要求形式化,并根据这些要求严格给出程求形式化,并根据这些要求严格给出程序设计语言的有关语义。序设计语言的有关语义。 属性文法表达式文法表达式文法 ET+T| T or T Tn | b E ET T1 1 + T+ T2 2 T T1 1.type = int .type = int T T2 2.type= T.type= T1 1.type .type E.type :=int E.type :=i
8、nt E E T T1 1 or Tor T2 2 T T1 1.type = bool .type = bool T T2 2.type= T.type= T1 1.type.type E.type :=bool E.type :=bool T T n n T.type := int T.type := int T T b b T.type := bool T.type := bool 属性文法和语法制导翻译属性文法和语法制导翻译 虽然形式语义学虽然形式语义学(如指称语义学、公理语义如指称语义学、公理语义学、操作语义学等学、操作语义学等)的研究已取得了许多的研究已取得了许多重大的进展,但目前
9、在实际应用中比较重大的进展,但目前在实际应用中比较流行的语义描述和语义处理的方法主要流行的语义描述和语义处理的方法主要还是属性文法和语法制导翻译方法还是属性文法和语法制导翻译方法 属性文法属性文法属性文法属性文法(attribute grammar)是一个三元组是一个三元组:A=(G,V,F),其中其中 G:是一个上下文无关文法是一个上下文无关文法V:有穷的属性集有穷的属性集,每个属性与文法的一个终结符或每个属性与文法的一个终结符或非终结符相连非终结符相连,这些属性代表与文法符号相关信这些属性代表与文法符号相关信息,如它的类型、值、代码序列、符号表内容息,如它的类型、值、代码序列、符号表内容等
10、等等等 .属性与变量一样,可以进行计算和传递。属性与变量一样,可以进行计算和传递。属性加工的过程即是语义处理的过程。属性加工的过程即是语义处理的过程。F:关于属性的属性断言或一组属性的计算规则关于属性的属性断言或一组属性的计算规则(称称为语义规则为语义规则) . 断言或语义规则与一个产生式相断言或语义规则与一个产生式相联联,只引用该产生式左端或右端的终结符或非终只引用该产生式左端或右端的终结符或非终结符相联的属性结符相联的属性. 属性有两种属性有两种 继承的和综合的属性继承的和综合的属性属性通常分为两类:综合属性和继承属性。简单地说,综属性通常分为两类:综合属性和继承属性。简单地说,综合属性用
11、于合属性用于“自下而上自下而上”传递信息,而继承属性用于传递信息,而继承属性用于“自上而下自上而下”传递信息。传递信息。出现在产生式左边的继承属性和出现在产生式右边的综合出现在产生式左边的继承属性和出现在产生式右边的综合属性不由所给定的产生式的属性计算规则进行计算,它属性不由所给定的产生式的属性计算规则进行计算,它们由其它产生式的属性规则计算或者由生计算器的参数们由其它产生式的属性规则计算或者由生计算器的参数提供。提供。 AX1 X2 XnA的综合属性的综合属性,计算计算 S(A):=f(I(X1),I(Xn)Xj的继承属性的继承属性,计算计算 T(Xj):=f(I(A),. I(Xn) 1)
12、非终结符既可有综合属性也可有继承属性,但文法开始非终结符既可有综合属性也可有继承属性,但文法开始符号没有继承属性符号没有继承属性. 2)终结符只有综合属性终结符只有综合属性.在一个属性文法中,对应于每个产生式在一个属性文法中,对应于每个产生式A都有一都有一套与之相关联的语义规则,每条规则的形式为套与之相关联的语义规则,每条规则的形式为b:=f(c1,c2ck)这里,这里,f是一个函数,而且或者是一个函数,而且或者(1)b是是A的一个综合属性并且的一个综合属性并且c1,c2ck是产生式是产生式右边文法符号的属性右边文法符号的属性;或者或者(2)b是产生式右边某个文法符号的一个继承属是产生式右边某
13、个文法符号的一个继承属性并且性并且c1,c2ck是是A或产生式右边任何文法符号的或产生式右边任何文法符号的属性。属性。在两种情况下,我们都说属性在两种情况下,我们都说属性b依赖于属性依赖于属性c1,c2ck 。 一个属性文法的例子一个属性文法的例子 例例8.1 P156 非终结符非终结符E、T及及F都有一个综合属性都有一个综合属性val,符号符号digit有一个综合属性有一个综合属性,它的值由词法分析器提供。与产生式,它的值由词法分析器提供。与产生式LEn对应的语义规则仅对应的语义规则仅仅是打印由仅是打印由E产生的算术表达式的值的一个过程,我们可认为这产生的算术表达式的值的一个过程,我们可认为
14、这条规则定义了条规则定义了L的一个虚属性。某些非终结符加下标是为了区分的一个虚属性。某些非终结符加下标是为了区分一个产生式中同一非终结符多次出现一个产生式中同一非终结符多次出现语 义 规 则 L EE E1+TE TT T1 * FT FF (E)F digitPrint(E.val) E.val:=E1.val+T.val E.val:=T.val T.val:=T1.val F.val T.val:=F.valF.val:=E.valF.val:=digit.lexval产 生 式设表达式为设表达式为35+4,则语义动作打印数值,则语义动作打印数值19.LE.val=19E.val=15T
15、.val=4T.val=15F.val=4T.val=3F.val=3F.val=5digit.lexval=4digit.lexval=5digit.lexval=3+*3*5+4的带注释的分析树的带注释的分析树继承属性继承属性u一个结点的继承属性值是由此结点的父结点和一个结点的继承属性值是由此结点的父结点和/或兄弟或兄弟结点的某些属性来决定的。结点的某些属性来决定的。例例8.2 继承属性L.in生 产 式语 义 规 则D TL T int T real L L1,idL idL.in:=T.typeT.type=integerT.type:=real L1.in:=L.in addtype
16、(id.entry,L.in) addtype(id.entry,L.in) DL.in= realL.in= realL.in= realT.type=realrealid2id1id3.Real id1,id2,id3,语法制导的翻译语法制导的翻译u一个一个翻译是符号串对的一个集合。在一个编译程是符号串对的一个集合。在一个编译程序定义的翻译中,符号串对是源程序和目标程序序定义的翻译中,符号串对是源程序和目标程序。各个编译阶段定义一个翻译,词法分析:(字。各个编译阶段定义一个翻译,词法分析:(字符串,单词串)语法分析:(单词串,语法树)符串,单词串)语法分析:(单词串,语法树)代码生成(语法
17、树,汇编语言)代码生成(语法树,汇编语言)设设 是输入字母表且是输入字母表且 是输出字母表。定义由语言是输出字母表。定义由语言 L1 *到语言到语言L2 *的一个翻译是由的一个翻译是由 *到到 *的的一个关系一个关系T,使得使得T的定义域为的定义域为L1且且T的值域为的值域为L2 。 使使(x,y) T的句子的句子y叫做叫做x的一个输出的一个输出.语法制导的翻译语法制导的翻译u 直观地说,一个语法制导翻译的基础是一个文法,其直观地说,一个语法制导翻译的基础是一个文法,其中翻译成分依附在每一产生式上。中翻译成分依附在每一产生式上。 u例例8.5: 把下述产生式定义的算术表达式映射到后缀波兰表把下
18、述产生式定义的算术表达式映射到后缀波兰表示:示: EE+T E T T TF T F F (E) F a E=ET+ E=T T=TF T=F F=E F=a 产生式 翻译规则翻译规则 u确定输入确定输入a+a a的输出:的输出: (E,E)(E+T,ET+) (T+T,TT+) (F+T,FT+) (a+T,aT+) (a+T F,aFF +) (a+F F,aFF +) (a+a F,aaF +) (a+a a,aaa +). . . 何谓中间代码何谓中间代码 ( Intermediate code ) ( Intermediate representation ) ( Intermedi
19、ate language ) 源程序的一种内部表示,不依赖目标机的结构,易于机械生成源程序的一种内部表示,不依赖目标机的结构,易于机械生成 目目 标代码的中间表示。标代码的中间表示。为什么要此阶段?为什么要此阶段?逻辑结构清楚;利于不同目标机上实现同一种语言;逻辑结构清楚;利于不同目标机上实现同一种语言; 利于进行与机器无关的优化利于进行与机器无关的优化 ;这些内部形式也能用于解释。;这些内部形式也能用于解释。中间代码的几种形式中间代码的几种形式逆波兰逆波兰 四元式四元式 三元式三元式 间接三元式间接三元式 树树 中间代码中间代码 逆波兰逆波兰 : A B C D - * + E C D N
20、/ + 四元式四元式 : (1) ( - C D T1 ) (2) ( * B T1 T2) (3) ( + A T2 T3) (4) ( - C D T4) (5) ( T4 N T5) (6) ( / E T5 T6) (7) ( + T3 T6 T7)例例 : A + B * ( C - D ) + E / ( C - D ) N 三三元元式式: (1) ( - C D ) (2) ( * B (1) ) (3) ( + A (2) ) (4) ( - C D ) (5) ( (4) N ) (6) ( / E (5) ) (7) ( + (3) (6) )例例 : A + B * ( C - D ) + E / ( C - D ) N间间接接三三元元式式 : 间间接接三三元元式式序序列列 间间接接码码表表 (1) ( -
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新人教版小学一年级数学上册期中试卷7
- 2024年设计师证书考试知识点精讲试题及答案
- 全球视野下的美术设计试题及答案
- 2024年纺织品检验员考试指导建议试题及答案
- 成人考试题库及答案详解
- 2024广告设计师职业定位与发展战略试题及答案
- 奥美招聘面试题目及答案
- 学前英语测试题及答案
- eda技术考试题及答案
- 康复听力测试题及答案
- 教科版六年级下册科学期末测试卷含完整答案(各地真题)
- JT-T-1198-2018公路交通噪声防护措施分类及技术要求
- 畅销书营销分析报告
- 2024学年(上)厦门市九年级质量检测化学试题及答案
- 文化差异与跨文化交际智慧树知到期末考试答案章节答案2024年郑州大学
- SYT 6169-2021 油藏分类-PDF解密
- 2024-2029年中国玻璃纤维增强混凝土行业市场现状分析及竞争格局与投资发展研究报告
- 24春国家开放大学《儿童心理学》期末大作业参考答案
- 交规记心中安全伴我行
- 父母教养方式对大班幼儿攻击性行为的影响及教育建议
- 个人装修施工合同范本
评论
0/150
提交评论