语法制导翻译和中间代码生成 .ppt
《语法制导翻译和中间代码生成 .ppt》由会员分享,可在线阅读,更多相关《语法制导翻译和中间代码生成 .ppt(60页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、语法制导翻译和中间代码生成 1现在学习的是第1页,共60页语法分析和语义分析的区别语法分析和语义分析的区别语法分析语法分析语法分析语法分析 利用产生式推导或归约,验证符号串是否为文法的一个句子,并没有考虑符号和符号串的意义。利用产生式推导或归约,验证符号串是否为文法的一个句子,并没有考虑符号和符号串的意义。利用产生式推导或归约,验证符号串是否为文法的一个句子,并没有考虑符号和符号串的意义。利用产生式推导或归约,验证符号串是否为文法的一个句子,并没有考虑符号和符号串的意义。语义分析语义分析语义分析语义分析 规定每个符号和符号串的意义,同时完成符号串所规定的语义动作,显然这是以语法正确为前提。规定
2、每个符号和符号串的意义,同时完成符号串所规定的语义动作,显然这是以语法正确为前提。规定每个符号和符号串的意义,同时完成符号串所规定的语义动作,显然这是以语法正确为前提。规定每个符号和符号串的意义,同时完成符号串所规定的语义动作,显然这是以语法正确为前提。例文法例文法例文法例文法GGEE(1)+T|TEE(1)+T|TTT(1)*F|FTT(1)*F|FF(E)|i|x|yF(E)|i|x|yi i:语法分析认为:语法分析认为:语法分析认为:语法分析认为i i是一个终结符,代表标识符;而语义分析认为它不仅是一个标识符,还具有标识符名、种是一个终结符,代表标识符;而语义分析认为它不仅是一个标识符,
3、还具有标识符名、种是一个终结符,代表标识符;而语义分析认为它不仅是一个标识符,还具有标识符名、种是一个终结符,代表标识符;而语义分析认为它不仅是一个标识符,还具有标识符名、种属和类型等。属和类型等。属和类型等。属和类型等。i i可能是一个简单变量,也可能是一个标号。标识符名由单词二元式中的值给出,种属和类可能是一个简单变量,也可能是一个标号。标识符名由单词二元式中的值给出,种属和类可能是一个简单变量,也可能是一个标号。标识符名由单词二元式中的值给出,种属和类可能是一个简单变量,也可能是一个标号。标识符名由单词二元式中的值给出,种属和类型可从符号表获取。型可从符号表获取。型可从符号表获取。型可从
4、符号表获取。x x:语法分析认为它是一个终结符,代表整常数;而语义分析认为它不仅是一个整常数,还具有值,值由单词二元式:语法分析认为它是一个终结符,代表整常数;而语义分析认为它不仅是一个整常数,还具有值,值由单词二元式:语法分析认为它是一个终结符,代表整常数;而语义分析认为它不仅是一个整常数,还具有值,值由单词二元式:语法分析认为它是一个终结符,代表整常数;而语义分析认为它不仅是一个整常数,还具有值,值由单词二元式中的值给出。中的值给出。中的值给出。中的值给出。2现在学习的是第2页,共60页y y:语法分析认为:语法分析认为:语法分析认为:语法分析认为y y是一个终结符是一个终结符是一个终结符
5、是一个终结符,代表实常数;而语义分析认为它不仅是一个实常数,还具有值,值由单词二代表实常数;而语义分析认为它不仅是一个实常数,还具有值,值由单词二代表实常数;而语义分析认为它不仅是一个实常数,还具有值,值由单词二代表实常数;而语义分析认为它不仅是一个实常数,还具有值,值由单词二元式中的值给出。元式中的值给出。元式中的值给出。元式中的值给出。F F:语法分析认为:语法分析认为:语法分析认为:语法分析认为F F是一个非终结符,代表语法单位是一个非终结符,代表语法单位是一个非终结符,代表语法单位是一个非终结符,代表语法单位 ,F F由由由由i i、x x、y y或或或或(E)(E)归约而得;而语义分
6、析认为归约而得;而语义分析认为归约而得;而语义分析认为归约而得;而语义分析认为F F还具有值、类型等属性。为了保存值和类型,引入语义变量还具有值、类型等属性。为了保存值和类型,引入语义变量还具有值、类型等属性。为了保存值和类型,引入语义变量还具有值、类型等属性。为了保存值和类型,引入语义变量F.valF.val、F.typeF.type。T T:语法分析认为:语法分析认为:语法分析认为:语法分析认为T T是一个非终结符,代表语法单位是一个非终结符,代表语法单位是一个非终结符,代表语法单位是一个非终结符,代表语法单位 ,由,由,由,由F F或或或或T*FT*F归约而得;而语义分析认为归约而得;而
7、语义分析认为归约而得;而语义分析认为归约而得;而语义分析认为T T还具有值、还具有值、还具有值、还具有值、类型等属性。为了保存值和类型,引入语义变量类型等属性。为了保存值和类型,引入语义变量类型等属性。为了保存值和类型,引入语义变量类型等属性。为了保存值和类型,引入语义变量T.valT.val、T.typeT.type。E E:语法分析认为:语法分析认为:语法分析认为:语法分析认为E E是一个非终结符,代表语法单位是一个非终结符,代表语法单位是一个非终结符,代表语法单位是一个非终结符,代表语法单位 ,由,由,由,由T T或或或或E+TE+T归约而得;而语义分析认为归约而得;而语义分析认为归约而
8、得;而语义分析认为归约而得;而语义分析认为E E还具有值、类型等属性。为了保存值和类型,引入语义变量还具有值、类型等属性。为了保存值和类型,引入语义变量还具有值、类型等属性。为了保存值和类型,引入语义变量还具有值、类型等属性。为了保存值和类型,引入语义变量E.valE.val、E.typeE.type。+:语法分析认为它是一个终结符,代表算术加;而语义分析认为它可能是一个实数加运算符,也可:语法分析认为它是一个终结符,代表算术加;而语义分析认为它可能是一个实数加运算符,也可:语法分析认为它是一个终结符,代表算术加;而语义分析认为它可能是一个实数加运算符,也可:语法分析认为它是一个终结符,代表算
9、术加;而语义分析认为它可能是一个实数加运算符,也可能是一个整数加运算符,视运算对象而定。能是一个整数加运算符,视运算对象而定。能是一个整数加运算符,视运算对象而定。能是一个整数加运算符,视运算对象而定。*:语法分析认为它是一个终结符,代表算术乘;而语义分析认为它可能是一个实数乘运算符,也可:语法分析认为它是一个终结符,代表算术乘;而语义分析认为它可能是一个实数乘运算符,也可:语法分析认为它是一个终结符,代表算术乘;而语义分析认为它可能是一个实数乘运算符,也可:语法分析认为它是一个终结符,代表算术乘;而语义分析认为它可能是一个实数乘运算符,也可能是一个整数乘运算符,视运算对象而定。能是一个整数乘
10、运算符,视运算对象而定。能是一个整数乘运算符,视运算对象而定。能是一个整数乘运算符,视运算对象而定。3现在学习的是第3页,共60页EE(1)+TEE(1)+T:在语法分析时认为它是一个:在语法分析时认为它是一个:在语法分析时认为它是一个:在语法分析时认为它是一个 的产生式,而在语义分析时认为:应将的产生式,而在语义分析时认为:应将的产生式,而在语义分析时认为:应将的产生式,而在语义分析时认为:应将E(1)E(1)的值(用的值(用的值(用的值(用E(1).valE(1).val表示)加上表示)加上表示)加上表示)加上T T的值(用的值(用的值(用的值(用T.valT.val表示),结果放在表示)
11、,结果放在表示),结果放在表示),结果放在E.valE.val中。若数据类型有实型和整型之分,在运算前还中。若数据类型有实型和整型之分,在运算前还中。若数据类型有实型和整型之分,在运算前还中。若数据类型有实型和整型之分,在运算前还需检查它们的类型。若类型不同,根据语言的语义规定,或者拒绝运算,或者将它们转换成相同类型(例实型)需检查它们的类型。若类型不同,根据语言的语义规定,或者拒绝运算,或者将它们转换成相同类型(例实型)需检查它们的类型。若类型不同,根据语言的语义规定,或者拒绝运算,或者将它们转换成相同类型(例实型)需检查它们的类型。若类型不同,根据语言的语义规定,或者拒绝运算,或者将它们转
12、换成相同类型(例实型),然后再进行实数加运算。,然后再进行实数加运算。,然后再进行实数加运算。,然后再进行实数加运算。TT(1)*FTT(1)*F:在语法分析时认为它是一个:在语法分析时认为它是一个:在语法分析时认为它是一个:在语法分析时认为它是一个 的产生式,而在语义分析时认为:应将的产生式,而在语义分析时认为:应将的产生式,而在语义分析时认为:应将的产生式,而在语义分析时认为:应将T(1)T(1)的值(用的值(用的值(用的值(用T(1).valT(1).val表示)乘上表示)乘上表示)乘上表示)乘上F F的值(用的值(用的值(用的值(用F.valF.val表示),结果放在表示),结果放在表
13、示),结果放在表示),结果放在T.valT.val中。若数据类型有实型和整型之分,在运算前还需检查它们中。若数据类型有实型和整型之分,在运算前还需检查它们中。若数据类型有实型和整型之分,在运算前还需检查它们中。若数据类型有实型和整型之分,在运算前还需检查它们的类型。若类型不同,根据语言的语义规定,或者拒绝运算,或者将它们转换成相同类型(例实型),然后再进行的类型。若类型不同,根据语言的语义规定,或者拒绝运算,或者将它们转换成相同类型(例实型),然后再进行的类型。若类型不同,根据语言的语义规定,或者拒绝运算,或者将它们转换成相同类型(例实型),然后再进行的类型。若类型不同,根据语言的语义规定,或
14、者拒绝运算,或者将它们转换成相同类型(例实型),然后再进行实数乘运算。实数乘运算。实数乘运算。实数乘运算。语义分析主要工作语义分析主要工作建立符号表和常数表。建立符号表和常数表。建立符号表和常数表。建立符号表和常数表。诊察和报告源程序中的语义错误。诊察和报告源程序中的语义错误。诊察和报告源程序中的语义错误。诊察和报告源程序中的语义错误。根据语言的语义产生中间代码(或机器指令),或直接解释执行。根据语言的语义产生中间代码(或机器指令),或直接解释执行。根据语言的语义产生中间代码(或机器指令),或直接解释执行。根据语言的语义产生中间代码(或机器指令),或直接解释执行。4现在学习的是第4页,共60页
15、6.1 语法制导翻译概述语法制导翻译概述语法制导翻译方法简介语法制导翻译方法简介 为每一个产生式配一个语义子程序。在语法分析过程中,当一个产生式获得匹配或用于归约时,此产生式相应的语为每一个产生式配一个语义子程序。在语法分析过程中,当一个产生式获得匹配或用于归约时,此产生式相应的语为每一个产生式配一个语义子程序。在语法分析过程中,当一个产生式获得匹配或用于归约时,此产生式相应的语为每一个产生式配一个语义子程序。在语法分析过程中,当一个产生式获得匹配或用于归约时,此产生式相应的语义子程序进入工作,完成既定的翻译任务。义子程序进入工作,完成既定的翻译任务。义子程序进入工作,完成既定的翻译任务。义子
16、程序进入工作,完成既定的翻译任务。实现方法(以实现方法(以SLR分析器为例)分析器为例)SLRSLR分析器是由工作栈(状态栈和符号栈)、分析表和总控程序三部分构成,只要适当修改工作栈和总分析器是由工作栈(状态栈和符号栈)、分析表和总控程序三部分构成,只要适当修改工作栈和总分析器是由工作栈(状态栈和符号栈)、分析表和总控程序三部分构成,只要适当修改工作栈和总分析器是由工作栈(状态栈和符号栈)、分析表和总控程序三部分构成,只要适当修改工作栈和总控程序,就可将控程序,就可将控程序,就可将控程序,就可将SLRSLR分析器用于语义分析。分析器用于语义分析。分析器用于语义分析。分析器用于语义分析。分析表不
17、变分析表不变分析表不变分析表不变改造工作栈改造工作栈改造工作栈改造工作栈 为了保存语义信息,在状态栈、符号栈的基础上增加单词值(为了保存语义信息,在状态栈、符号栈的基础上增加单词值(为了保存语义信息,在状态栈、符号栈的基础上增加单词值(为了保存语义信息,在状态栈、符号栈的基础上增加单词值(wvalwval)栈和语义()栈和语义()栈和语义()栈和语义(semanticsemantic)栈。)栈。)栈。)栈。状态栈状态栈状态栈状态栈符号栈符号栈符号栈符号栈 单词值栈单词值栈单词值栈单词值栈语义栈语义栈语义栈语义栈5现在学习的是第5页,共60页 state symbol wval .val .ad
18、dr state symbol wval .val .addr .cat .type .cat .type S SmmX XX.valX.valX.addrX.addrX.catX.catX.typeX.typeS Sm-1m-1Y YY.valY.valY.addrY.addrY.catY.catY.typeY.typeS S0 0#NULNUL修改总控程序修改总控程序修改总控程序修改总控程序 在移进时,除移进状态和单词的种别外,还需移进单词的值。在移进时,除移进状态和单词的种别外,还需移进单词的值。在移进时,除移进状态和单词的种别外,还需移进单词的值。在移进时,除移进状态和单词的种别外,还
19、需移进单词的值。在用某个产生式进行归约时,除需执行归约动作外,还需调用相应语义子程序。在用某个产生式进行归约时,除需执行归约动作外,还需调用相应语义子程序。在用某个产生式进行归约时,除需执行归约动作外,还需调用相应语义子程序。在用某个产生式进行归约时,除需执行归约动作外,还需调用相应语义子程序。状态栈不变状态栈不变状态栈不变状态栈不变符号栈不变符号栈不变符号栈不变符号栈不变增加单词值栈,用于保存单词的值(字符串形式)。增加单词值栈,用于保存单词的值(字符串形式)。增加单词值栈,用于保存单词的值(字符串形式)。增加单词值栈,用于保存单词的值(字符串形式)。增加语义栈,用于记录分析过程中需保留的语
20、义值。例,值(增加语义栈,用于记录分析过程中需保留的语义值。例,值(增加语义栈,用于记录分析过程中需保留的语义值。例,值(增加语义栈,用于记录分析过程中需保留的语义值。例,值(.val.val)、地址()、地址()、地址()、地址(.addr.addr)、种属()、种属()、种属()、种属(.cat.cat)、)、)、)、类型(类型(类型(类型(.type.type)等。)等。)等。)等。经改造后,工作栈如下所示:经改造后,工作栈如下所示:经改造后,工作栈如下所示:经改造后,工作栈如下所示:6现在学习的是第6页,共60页解释执行例解释执行例文法及语义子程序文法及语义子程序文法及语义子程序文法及
21、语义子程序struct char code;char val20;t;struct char code;char val20;t;0.SE0.SEcoutE.valcoutE.val1.EE(1)+E(2)1.EE(1)+E(2)E.val=E(1).val+E(2).val;E.val=E(1).val+E(2).val;2.EE(1)*E(2)2.EE(1)*E(2)E.val=E(1).val*E(2).val;E.val=E(1).val*E(2).val;3.E(E(1)3.E(E(1)E.val=E(1).val;E.val=E(1).val;4.Ex4.ExE.val=atoi(
22、t.val);E.val=atoi(t.val);/atoi/atoi为为为为C C语言系统函数语言系统函数语言系统函数语言系统函数 假定语义动作是紧接着归约之后执行,语义子程序改写如下:假定语义动作是紧接着归约之后执行,语义子程序改写如下:假定语义动作是紧接着归约之后执行,语义子程序改写如下:假定语义动作是紧接着归约之后执行,语义子程序改写如下:0.SE0.SEcoutsemantictop.val;coutsemantictop.val;1.EE(1)+E(2)1.EE(1)+E(2)semantictop.val=semantictop.val+semantictop+2.val;sem
23、antictop.val=semantictop.val+semantictop+2.val;2.EE(1)*E(2)2.EE(1)*E(2)semantictop.val=semantictop.val*semantictop+2.val;semantictop.val=semantictop.val*semantictop+2.val;3.E(E(1)3.E(E(1)semantictop.val=semantictop+1.val.val;semantictop.val=semantictop+1.val.val;4.Ex4.Ex semantictop.val=atoi(wvaltop
24、);semantictop.val=atoi(wvaltop);7现在学习的是第7页,共60页+*()x x#E E0 0s2s2s3s31 11 1s4s4s5s5AccAcc2 2s2s2s3s36 63 3r4r4r4r4r4r4r4r44 4s2s2s3s37 75 5s2s2s3s38 86 6s4s4s5s5s9s97 7r1r1s5s5r1r1r1r18 8r2r2r2r2r2r2r2r29 9r3r3r3r3r3r3r3r3手工计算手工计算手工计算手工计算 假设源程序为:假设源程序为:假设源程序为:假设源程序为:7+9*57+9*5。经词法分析,单词二元式序列为。经词法分析,单
25、词二元式序列为。经词法分析,单词二元式序列为。经词法分析,单词二元式序列为(x,7)(+,NUL)(x,9)(*,NUL)(x,5)(#,NUL)(x,7)(+,NUL)(x,9)(*,NUL)(x,5)(#,NUL)分析过程如黑板所示(在语义栈中,分析过程如黑板所示(在语义栈中,分析过程如黑板所示(在语义栈中,分析过程如黑板所示(在语义栈中,“NUL”NUL”改用改用改用改用-表示):表示):表示):表示):stepstepstatestate栈栈栈栈 symbolsymbol栈栈栈栈 wvalwval栈栈栈栈 .val.val栈栈栈栈 输入串输入串输入串输入串SLRSLR分析表分析表分析表
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语法制导翻译和中间代码生成 语法 制导 翻译 中间 代码 生成
限制150内