6 2 2基于属性文法的处理方法、S-属性文法 - 基于属性文法的处理方法、S-属性文法2_第1页
6 2 2基于属性文法的处理方法、S-属性文法 - 基于属性文法的处理方法、S-属性文法2_第2页
6 2 2基于属性文法的处理方法、S-属性文法 - 基于属性文法的处理方法、S-属性文法2_第3页
6 2 2基于属性文法的处理方法、S-属性文法 - 基于属性文法的处理方法、S-属性文法2_第4页
6 2 2基于属性文法的处理方法、S-属性文法 - 基于属性文法的处理方法、S-属性文法2_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,编译原理,第六章 属性文法和语法制导翻译,2,第六章 属性文法和语法制导翻译,属性文法 基于属性文法的处理方法 S-属性文法的自下而上计算 L-属性文法和自顶向下翻译,3,第六章 属性文法和语法制导翻译,属性文法 基于属性文法的处理方法 S-属性文法的自下而上计算 L-属性文法和自顶向下翻译,4,6.2 基于属性文法的的处理方法,依赖图 树遍历 一遍扫描,5,一遍扫描的处理方法,一遍扫描的处理方法是在语法分析的同时计算属性值 所采用的语法分析方法 属性的计算次序 L属性文法适合于一遍扫描的自上而下分析 S属性文法适合于一遍扫描的自下而上分析,6,语法制导翻译法,所谓语法制导翻译法,直观上说

2、就是为文法中每个产生式配上一组语义规则,并且在语法分析的同时执行这些语义规则 语义规则被计算的时机 在自上而下语法分析中,一个产生式匹配输入串成功时 在自下而上分析中,当一个产生式被用于进行归约时,7,抽象语法树,在语法树中去掉那些对翻译不必要的信息,从而获得更有效的源程序中间表示。这种经变换后的语法树称之为抽象语法树(Abstract Syntax Tree),Sif B then S1 else S2,3*5+4,8,建立表达式的抽象语法树,mknode (op,left,right) 建立一个运算符号结点,标号是op,两个域left和right分别指向左子树和右子树 mkleaf (id

3、,entry) 建立一个标识符结点,标号为id,一个域entry指向标识符在符号表中的入口 mkleaf (num,val) 建立一个数结点,标号为num,一个域val用于存放数的值,9,建立抽象语法树的语义规则,产 生 式 语 义 规 则 EE1+TE.nptr := mknode( +, E1.nptr, T.nptr ) EE1-TE.nptr := mknode( -, E1.nptr, T.nptr ) ETE.nptr := T.nptr T (E)T.nptr := E.nptr TidT.nptr := mkleaf ( id, id.entry ) Tnum T.nptr :

4、= mkleaf ( num, num.val ),10,a4c的抽象语法树,E,-,T,id,T,num,+,EE1+T E.nptr := mknode( +, E1.nptr, T.nptr ) EE1-T E.nptr := mknode( -, E1.nptr, T.nptr ) ET E.nptr := T.nptr Tid T.nptr := mkleaf ( id, id.entry ) Tnum T.nptr := mkleaf ( num, num.val ),11,第六章 属性文法和语法制导翻译,属性文法 基于属性文法的处理方法 S-属性文法的自下而上计算 L-属性文法和

5、自顶向下翻译,12,6.3 S-属性文法的自下而上计算,S-属性文法:只含有综合属性 综合属性可以在分析输入符号串的同时由自下而上的分析器来计算 分析器可以保存与栈中文法符号有关的综合属性值,每当进行归约时,新的属性值就由栈中正在归约的产生式右边符号的属性值来计算,13,S-属性文法的计算,在分析栈中使用一个附加的域来存放综合属性值 假设语义规则A.a:=f(X.x,Y.y,Z.z)是对应于产生式AXYZ的,14,产生式 代 码 段 LEnprint(valtop) EE1+Tvalntop := valtop-2+valtop ET TT1*Fvalntop := valtop-2*valt

6、op TF F (E)valntop :=valtop-1 Fdigit,产 生 式 语 义 规 则 LEn print(E.val) EE1+T E.val := E1.val+T.val ET E.val :=T.val TT1*F T.val :=T1.val* F.val TF T.val :=F.val F (E) F.val :=E.val Fdigit F.val :=digit.lexval,讨论:E、T和F为什么没有代码段 ?,15,statesym val 输入用到的产生式 0 # - 3*5+4n 05#3 -3 *5+4n 03 #F -3 *5+4n Fdigit 0

7、2 #T -3 *5+4n TF 027#T* -3 - 5+4n 0275 #T*5 -3 - 5 +4n,产生式 代 码 段 LEnprint(valtop) EE1+Tvalntop := valtop-2+valtop ET TT1*Fvalntop := valtop-2*valtop TF F (E)valntop :=valtop-1 Fdigit,16,statesym val 输入用到的产生式 0275 #T*5 -3 5+4n 02710#T*F -3 - 5 +4n Fdigit 02 #T -15 +4n TT*F 01 #E -15 +4n ET 016 #E+ -1

8、5- 4n 0165 #E+4 -15- 4 n,产生式 代 码 段 LEnprint(valtop) EE1+Tvalntop := valtop-2+valtop ET TT1*Fvalntop := valtop-2*valtop TF F (E)valntop :=valtop-1 Fdigit,17,statesym val 输入用到的产生式 0165 #E+4 -15- 4 n 0163 #E+F -15- 4 n Fdigit 0169 #E+T -15- 4 n TF 01#E -19 n EE+T #En -19- #L -19 LEn,产生式 代 码 段 LEnprint(valtop) EE1+Tvalntop

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论