编译原理第八章语法制导翻译与中间代码生成ppt课件.ppt

编译原理第八章语法制导翻译与中间代码生成ppt课件.ppt

ID:59486336

大小:204.00 KB

页数:48页

时间:2020-09-13

编译原理第八章语法制导翻译与中间代码生成ppt课件.ppt_第1页
编译原理第八章语法制导翻译与中间代码生成ppt课件.ppt_第2页
编译原理第八章语法制导翻译与中间代码生成ppt课件.ppt_第3页
编译原理第八章语法制导翻译与中间代码生成ppt课件.ppt_第4页
编译原理第八章语法制导翻译与中间代码生成ppt课件.ppt_第5页
资源描述:

《编译原理第八章语法制导翻译与中间代码生成ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第八章语法制导翻译与中间代码生成语言的结构可形式的用一组产生式(BNF)描述,这使得语言的词法分析器和语法分析器的自动生成成为可能。本章:语义的形式化困难,语义处理复杂,难以形式化语义处理主要包括静态语义(包括类型规则和作用域/可见性规则)检查和翻译成中间代码;对属性和属性文法作一介绍;语法制导翻译:一种接近形式化的系统;典型的中间代码;语义子程序设计;各种基本语言成分的自下而上分析的语法制导翻译。8.1属性和属性文法8.1.1属性文法属性(attribute)是编程语言结构的任意特性,是一个语法概念的特征描述。属性是想表示的任何东西,典型的属性有:变量的数据类型、表达式的值、存储器中变量

2、的位置、程序的目标代码、数的有效位数等。属性文法(attributegrammar):将属性关系等式附加在相应文法规则上的文法属性的表示:若a是文法符号X的一个属性,则记作X.a。a称为属性变量。属性关系等式与采用何种语法分析方式无关,但是属性的计算次序受分析方法所限定的分析树结点的建立次序的约束。例8.1考虑下面简单的无符号数文法:number→numberdigit

3、digitdigit→0

4、1

5、2

6、3

7、4

8、5

9、6

10、7

11、8

12、9属性文法:文法规则语义规则number(1)→number(2)digitnumber(1).val=number(2).val*10+digit.valnumb

13、er→digitnumber.val=digit.valdigit→0digit.val=0……digit→9digit.val=9属性计算依赖于分析树或语法树明确或不明确的遍历:例8.2考虑下列类似C语言中变量声明的简单文法:decl→typevar-listtype→int

14、floatvar-list→id,var-list

15、id属性文法:文法规则语义规则decl→typevar-listvar-list.dtype=type.dtypetype→inttype.dtype=integertype→floattype.dtype=realvar-list(1)→id,var-list(

16、2)id.dtype=var-list(1).dtypevar-list(2).dtype=var-list(1).dtypevar-list→idid.dtype=var-list.dtype字符串floatx,y的语法树,显示属性文法指定的dtype属性:辅助函数mkOpNode和mkNumNode:mkOpNode构成一个新的树结点;mkNumNode构成一个叶子结点。例8.3考虑下列简单的整数算术表达式文法:exp→exp+term

17、exp-term

18、termterm→term*factor

19、factorfactor→(exp)

20、numberexp(或term或factor)的基本

21、属性是它的数字值,写作val。属性文法……简单整型算术表达式的抽象语法树的属性文法:文法规则语义规则exp(1)→exp(2)+termexp(1).tree=mkOpNode(+,exp(2).tree,term.tree)exp(1)→exp(2)-termexp(1).tree=mkOpNode(-,exp(2).tree,term.tree)exp→termexp.tree=term.treeterm(1)→term(2)*factorterm(1).tree=mkOpNode(*,term(2).tree,factor.tree)term→factorterm.tree=fact

22、or.treefactor→(exp)factor.tree=exp.treefactor→numberfactor.tree=mkNumNode(number.lexval)8.1.2综合和继承属性综合属性(synthesizedattribute):若产生式左部符号A的属性值是通过右部符号的属性值或A的其它属性值得来的S属性文法:所有的属性都是综合的—任一右部符号的属性计算与它所在的产生式无关(从语法树看,任一结点的属性仅依赖它的下层或它自己的其它属性,换句话说不依赖上层和同层其它结点的属性)S属性文法的属性值可以通过对树进行简单后序遍历来计算:voidPostEval(treenod

23、eT){foreachchildCofTdoPostEval(C);computeallsynthesizedattributesofT;}并不是所有的属性都是综合的。所有的非综合属性称为继承(inherited)属性。例8.4对例8.1中的文法进行修改,数可以是八进制或十进制的based-num→numbasecharbasechar→o

24、dnum→numdigit

25、digitdigit→0

26、1

27、2

28、3

29、4

30、5

31、6

32、7

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

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

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