LGYBY语法制导翻译和中间代码生成.ppt
《LGYBY语法制导翻译和中间代码生成.ppt》由会员分享,可在线阅读,更多相关《LGYBY语法制导翻译和中间代码生成.ppt(47页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第8章章语法制导翻译和中间语法制导翻译和中间代码生成代码生成赖国勇赖国勇攀枝花学院计算机学院攀枝花学院计算机学院1赖国勇本章内容重点难点教学要求本章内容重点难点教学要求n n教学内容:教学内容:教学内容:教学内容:n n语义分析概述;属性文法;中间代码生成。语义分析概述;属性文法;中间代码生成。语义分析概述;属性文法;中间代码生成。语义分析概述;属性文法;中间代码生成。n n重点:重点:重点:重点:三种中间语言:四元式、三元式、逆波兰三种中间语言:四元式、三元式、逆波兰三种中间语言:四元式、三元式、逆波兰三种中间语言:四元式、三元式、逆波兰式。式。式。式。n n难点:难点:难点:难点:三种中
2、间语言:四元式、三元式、逆波兰三种中间语言:四元式、三元式、逆波兰三种中间语言:四元式、三元式、逆波兰三种中间语言:四元式、三元式、逆波兰式。式。式。式。n n教学要求教学要求教学要求教学要求n n1 1、了解:、了解:、了解:、了解:属性文法。属性文法。属性文法。属性文法。n n2 2、理解:、理解:、理解:、理解:语义分析的功能。语义分析的功能。语义分析的功能。语义分析的功能。n n3 3、掌握:、掌握:、掌握:、掌握:逆波兰式、三元式和树形表示、四元式。逆波兰式、三元式和树形表示、四元式。逆波兰式、三元式和树形表示、四元式。逆波兰式、三元式和树形表示、四元式。2赖国勇第第8章章_目录目录
3、n n8.1语义处理概述语义处理概述n n8.2属性文法,语法制导翻译属性文法,语法制导翻译n n8.3中间代码中间代码3赖国勇语义分析的基础语义分析的基础n n1、语义分析的内容?、语义分析的内容?n n2、静态语义分析的主要任务?、静态语义分析的主要任务?n n3、动态语义分析的主要任务?、动态语义分析的主要任务?n n4、语义的形式化描述?、语义的形式化描述?4赖国勇源语言程序源语言程序中间代码中间代码汇编代码汇编代码词法分析词法分析语义分析语义分析语法分析语法分析中间代码生成中间代码生成代码生成代码生成在编译中的逻辑阶段在编译中的逻辑阶段前前端端处处理理后后端端处处理理语语义义处处理理
4、语义处理(语义分析和中间代码生成)语义处理(语义分析和中间代码生成)5赖国勇语言的语义和编译的语义处理工作语言的语义和编译的语义处理工作n n静态语义:语法规则的良形式条件。静态语义:语法规则的良形式条件。n n静态语义检查:审查静态语义。静态语义检查:审查静态语义。n n动态语义:程序单元执行的操作。动态语义:程序单元执行的操作。n n动态语义处理:生成中间动态语义处理:生成中间(目标目标)代码。代码。6赖国勇8.1语义处理概述语义处理概述7赖国勇编译阶段编译阶段-语义处理语义处理编译阶段编译阶段语义处理语义处理语法分析后的源程序语法分析后的源程序n n程序设计语言的语义程序设计语言的语义程
5、序设计语言的语义程序设计语言的语义n n静态语义静态语义静态语义静态语义是对程序约束的描述,这些约束无法通过抽象语法是对程序约束的描述,这些约束无法通过抽象语法是对程序约束的描述,这些约束无法通过抽象语法是对程序约束的描述,这些约束无法通过抽象语法规则来妥善地描述,实质上就是语法规则的良形式条件,它规则来妥善地描述,实质上就是语法规则的良形式条件,它规则来妥善地描述,实质上就是语法规则的良形式条件,它规则来妥善地描述,实质上就是语法规则的良形式条件,它可以分为可以分为可以分为可以分为类型规则和作用域类型规则和作用域类型规则和作用域类型规则和作用域/可见性规则可见性规则可见性规则可见性规则两大类
6、。例如:两大类。例如:两大类。例如:两大类。例如:n n类型相容性,变量先声明后引用,名称相关要求。类型相容性,变量先声明后引用,名称相关要求。类型相容性,变量先声明后引用,名称相关要求。类型相容性,变量先声明后引用,名称相关要求。n n动态语义动态语义动态语义动态语义程序单位描述的计算。程序单位描述的计算。程序单位描述的计算。程序单位描述的计算。n n编译程序的语义处理工作编译程序的语义处理工作编译程序的语义处理工作编译程序的语义处理工作n n静态语义审查。静态语义审查。静态语义审查。静态语义审查。n n解释执行动态语义。解释执行动态语义。解释执行动态语义。解释执行动态语义。8.18赖国勇静
7、态语义审查静态语义审查n n1、类型检查。、类型检查。n n2、控制流检查。控制流语句必须使控制、控制流检查。控制流语句必须使控制转移到合法的地方。转移到合法的地方。n n3、一致性检查。、一致性检查。n n4、上下文相关性检查。、上下文相关性检查。n n5、名字的作用域分析。、名字的作用域分析。8.19赖国勇解释执行动态语义解释执行动态语义n n(计算)生成代码(中间代码或目标代码)(计算)生成代码(中间代码或目标代码)(计算)生成代码(中间代码或目标代码)(计算)生成代码(中间代码或目标代码)8.110赖国勇例例8.18.111赖国勇语义处理的描述语义处理的描述n n属性文法:描述语义规则
8、。属性文法:描述语义规则。n n语法制导翻译:在语法分析的同时,执语法制导翻译:在语法分析的同时,执行语义子程序:行语义子程序:n n检查静态语义。检查静态语义。检查静态语义。检查静态语义。n n翻译翻译翻译翻译(生成生成生成生成)中间中间中间中间(目标目标目标目标)代码。代码。代码。代码。8.112赖国勇语义处理的描述语义处理的描述-例例8.2n nP PDD;E En nDDDD;D|id:TD|id:Tn nT Tchar|integer|arraynumofT|char|integer|arraynumofT|T Tn nE Eliteral|num|id|EmodE|EE|Elite
9、ral|num|id|EmodE|EE|En nP P代表程序;代表程序;代表程序;代表程序;D D代表说明;代表说明;代表说明;代表说明;E E代表表达式。如程序语句:代表表达式。如程序语句:代表表达式。如程序语句:代表表达式。如程序语句:n nkey:integer;key:integer;n nString:char;String:char;n nkeymod1999keymod1999n n语言本身提供两种基本类型:语言本身提供两种基本类型:语言本身提供两种基本类型:语言本身提供两种基本类型:charchar和和和和integerinteger。n n除此之外还有缺省的基本类型除此之外
10、还有缺省的基本类型除此之外还有缺省的基本类型除此之外还有缺省的基本类型type_errortype_error和和和和voidvoid。假定所。假定所。假定所。假定所有数组都从下标有数组都从下标有数组都从下标有数组都从下标1 1开始开始开始开始8.113赖国勇确定标识符类型的语义描述确定标识符类型的语义描述n n(1 1)P PD D;E En n(2 2)D DD D;D Dn n(3 3)D Did:Taddtype(id.Entryid:Taddtype(id.Entry,T.type)T.type)n n(4 4)T TcharT.Type:=charcharT.Type:=charn
11、 n(5 5)T TintegerT.Type:=integerintegerT.Type:=integern n(6 6)T TT T1 1T.Type:=pointer(TT.Type:=pointer(T1 1.type).type)n n(7 7)T TarraynumofTarraynumofT1 1 n nT.Type:=array(num.ValT.Type:=array(num.Val,TT1 1.type).type)8.114赖国勇类型检查的语义描述类型检查的语义描述-例例8.2n nS Sid:=Eid:=Eifid.Type=E.Typeifid.Type=E.Type
12、ThenS.Type:=voidThenS.Type:=voidelseS.Type:=type_errorelseS.Type:=type_errorn nS SifEthenSifEthenS1 1ifE.type=BooleanifE.type=BooleanthenS.Type:=SthenS.Type:=S1 1.type.typeelseS.type:=type_elseS.type:=type_errorerrorn nS SwhileEdoSwhileEdoS1 1ifE.type=BooleanifE.type=BooleanthenS.type:=SthenS.type:=
13、S1 1.Type.TypeelseS.type:=type_errorelseS.type:=type_error8.115赖国勇静态语义分析的环境静态语义分析的环境n n符号表符号表(将在第(将在第9章详细讲述):章详细讲述):n n为语义分析提供类型、作用域等信息。为语义分析提供类型、作用域等信息。为语义分析提供类型、作用域等信息。为语义分析提供类型、作用域等信息。n n为代码生成提供类型、作用域、存储类别、为代码生成提供类型、作用域、存储类别、为代码生成提供类型、作用域、存储类别、为代码生成提供类型、作用域、存储类别、存储(相对)位置等信息。存储(相对)位置等信息。存储(相对)位置等信
14、息。存储(相对)位置等信息。8.116赖国勇8.2属性文法,语法制导翻译属性文法,语法制导翻译属性文法属性文法8.2.2两种属性两种属性8.2.3属性计算方法属性计算方法8.2.4语法制导翻译语法制导翻译17赖国勇属性文法属性文法n n属性文法属性文法A(attributegrammar)是一个三是一个三元组:元组:A=(G,V,F),其中:,其中:n nG G:是一个上下文无关文法。:是一个上下文无关文法。:是一个上下文无关文法。:是一个上下文无关文法。n nV V:有穷的属性集,每个属性与文法的一终结符:有穷的属性集,每个属性与文法的一终结符:有穷的属性集,每个属性与文法的一终结符:有穷的
15、属性集,每个属性与文法的一终结符或非终结符相联。或非终结符相联。或非终结符相联。或非终结符相联。n nF F:关于属性的属性断言或谓词集。每个断言与:关于属性的属性断言或谓词集。每个断言与:关于属性的属性断言或谓词集。每个断言与:关于属性的属性断言或谓词集。每个断言与一个产生式相联。而此断言只引用该产生式左端一个产生式相联。而此断言只引用该产生式左端一个产生式相联。而此断言只引用该产生式左端一个产生式相联。而此断言只引用该产生式左端或右端的终结符或非终结符相联的属性。或右端的终结符或非终结符相联的属性。或右端的终结符或非终结符相联的属性。或右端的终结符或非终结符相联的属性。18赖国勇属性文法属
16、性文法n n属性文法是允许为每个终结符和非终结符配备属性文法是允许为每个终结符和非终结符配备属性文法是允许为每个终结符和非终结符配备属性文法是允许为每个终结符和非终结符配备一些属性的文法。一些属性的文法。一些属性的文法。一些属性的文法。n n它既能描述程序设计语言的语法,又为其语它既能描述程序设计语言的语法,又为其语它既能描述程序设计语言的语法,又为其语它既能描述程序设计语言的语法,又为其语义描述提供了手段。义描述提供了手段。义描述提供了手段。义描述提供了手段。n n属性文法由于属性文法由于属性文法由于属性文法由于19681968年引进年引进年引进年引进.n n后来才被用于编译程序的设计。后来
17、才被用于编译程序的设计。后来才被用于编译程序的设计。后来才被用于编译程序的设计。8.219赖国勇例例8.4属性文法属性文法n n表达式文法表达式文法表达式文法表达式文法ET+T|TorTET+T|TorTTn|bTn|bn nE ET T11+T+T22n nTT1 1.type=int.type=intn nT T2 2.type=T.type=T1 1.type.typen nE.type:=intE.type:=intn nEE T T11orTorT22n nTT1 1.type=bool.type=booln nT T2 2.type=T.type=T1 1.type.typen n
18、E.type:=boolE.type:=booln nTTnnT.type:=intT.type:=intn nTTbbT.type:=boolT.type:=bool8.220赖国勇属性赋值属性赋值n n属性有不同的类型,可以象变量一样地被赋值。属性有不同的类型,可以象变量一样地被赋值。属性有不同的类型,可以象变量一样地被赋值。属性有不同的类型,可以象变量一样地被赋值。n n赋值规则附加于语法规则之上。赋值规则附加于语法规则之上。赋值规则附加于语法规则之上。赋值规则附加于语法规则之上。n n赋值与语法分析同时进行,赋值过程就是语义处理过赋值与语法分析同时进行,赋值过程就是语义处理过赋值与语法
19、分析同时进行,赋值过程就是语义处理过赋值与语法分析同时进行,赋值过程就是语义处理过程。程。程。程。n n在推导语法树的时候,诸属性的值被计算并通过赋值在推导语法树的时候,诸属性的值被计算并通过赋值在推导语法树的时候,诸属性的值被计算并通过赋值在推导语法树的时候,诸属性的值被计算并通过赋值规则层层传递。规则层层传递。规则层层传递。规则层层传递。n n有的从语法规则左边向右边传,有的从右边向左边传。有的从语法规则左边向右边传,有的从右边向左边传。有的从语法规则左边向右边传,有的从右边向左边传。有的从语法规则左边向右边传,有的从右边向左边传。n n语法推导树最后完成时,就得到开始符号的属性值,语法推
20、导树最后完成时,就得到开始符号的属性值,语法推导树最后完成时,就得到开始符号的属性值,语法推导树最后完成时,就得到开始符号的属性值,也就是整个程序的语义。也就是整个程序的语义。也就是整个程序的语义。也就是整个程序的语义。8.221赖国勇例例8.6n n例如:定义表例如:定义表例如:定义表例如:定义表达式的文法如达式的文法如达式的文法如达式的文法如下下下下(例例例例8.6)8.6)n nE EE+EE+En nE E(E)(E)n nE En nn n给出定义表达给出定义表达给出定义表达给出定义表达式值的属性文式值的属性文式值的属性文式值的属性文法。法。法。法。n n我们为文法符号我们为文法符号
21、我们为文法符号我们为文法符号E E引进属性符号引进属性符号引进属性符号引进属性符号valval,用,用,用,用E.valE.val表示表示表示表示E E的值,属性计算规则以赋值语句的形式给出,的值,属性计算规则以赋值语句的形式给出,的值,属性计算规则以赋值语句的形式给出,的值,属性计算规则以赋值语句的形式给出,附在每个产生式后,并用大括号括起来。为了明附在每个产生式后,并用大括号括起来。为了明附在每个产生式后,并用大括号括起来。为了明附在每个产生式后,并用大括号括起来。为了明确确确确E E的不同出现位置,用上角标区别。终结符的不同出现位置,用上角标区别。终结符的不同出现位置,用上角标区别。终结
22、符的不同出现位置,用上角标区别。终结符n n的的的的值是词法分析程序提供的,这里用值是词法分析程序提供的,这里用值是词法分析程序提供的,这里用值是词法分析程序提供的,这里用n.lexn.lex表示。下表示。下表示。下表示。下面给出属性文法:面给出属性文法:面给出属性文法:面给出属性文法:n nE EE E1 1+E+E2 2E.val:=EE.val:=E1 1.val+E.val+E2 2.val.valn nE E(E(E1 1)E.val:=EE.val:=E1 1.val.valn nE En nE.val:=n.lexE.val:=n.lexn n属性文法的主要思想有两点:属性文法的
23、主要思想有两点:属性文法的主要思想有两点:属性文法的主要思想有两点:n n首先对于每个文法符号引进相关的属性符号;首先对于每个文法符号引进相关的属性符号;首先对于每个文法符号引进相关的属性符号;首先对于每个文法符号引进相关的属性符号;n n其次对于每个产生式写出属性值计算的规则。其次对于每个产生式写出属性值计算的规则。其次对于每个产生式写出属性值计算的规则。其次对于每个产生式写出属性值计算的规则。8.222赖国勇8.2.2两种属性两种属性n n属性分为两种属性分为两种属性分为两种属性分为两种:继承继承继承继承属性和综合属性属性和综合属性属性和综合属性属性和综合属性(inheritedandin
24、heritedandsynthesized(derivsynthesized(derived)attributeed)attribute)。)。)。)。n n继承属性的计算规则继承属性的计算规则继承属性的计算规则继承属性的计算规则自顶向下,从其父结自顶向下,从其父结自顶向下,从其父结自顶向下,从其父结点的属性值计算出来点的属性值计算出来点的属性值计算出来点的属性值计算出来的。的。的。的。n n综合属性的计算规则综合属性的计算规则综合属性的计算规则综合属性的计算规则自底向上,从其兄弟自底向上,从其兄弟自底向上,从其兄弟自底向上,从其兄弟结点和子结点的属性结点和子结点的属性结点和子结点的属性结点和
25、子结点的属性值计算出来的。值计算出来的。值计算出来的。值计算出来的。n n出现在产生式左边的继承属性和出出现在产生式左边的继承属性和出出现在产生式左边的继承属性和出出现在产生式左边的继承属性和出现在产生式右边的综合属性不由所现在产生式右边的综合属性不由所现在产生式右边的综合属性不由所现在产生式右边的综合属性不由所给定的产生式的属性计算规则进行给定的产生式的属性计算规则进行给定的产生式的属性计算规则进行给定的产生式的属性计算规则进行计算,它们由其它产生式的属性规计算,它们由其它产生式的属性规计算,它们由其它产生式的属性规计算,它们由其它产生式的属性规则计算。则计算。则计算。则计算。n nA AX
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LGYBY 语法 制导 翻译 中间 代码 生成
限制150内