- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章 语法制导翻译技术 ;内容提要;引言;并行处理方式:
对文法中的每个产生式都附加一些动作(语义分析、操作符号表、代码生成等),在语法分析过程中,每当需要使用一个产生式进行推导或归约,语法分析程序除执行相应的语法分析动作外,还要执行相应的其它动作,完成语义分析和代码生成等工作。(边分析边翻译)
并行处理方式涉及几个概念
翻译文法
语法制导翻译
属性翻译文法
;翻译文法:在描述语言规则的文法产生式右部的适当位置加入动作而得到的文法 。;① E→E+T ⑤ F→(E)
② E→T ⑥ F→a
③ T→T*F ⑦ F→b
④ T→F ⑧ F→c;例:对于符号串(a+b)*c
用输入文法推导输入序列(a+b)*c:
E =T=T*F=F*F=(E)*F=(E+T)*F=(T+T)*F=(F+T)*F
=(a+T)*F=(a+F)*F=(a+b)*F=(a+b)*c
用翻译文法推导活动序列(a@a+b@b@+)*c@c@*:
E =T=T*F@*=F*F@*=(E)*F@*=(E+T@+)*F@*=(T+T@+)*F@*
=(F+T@+)*F@*=(a@a+T@+)*F@*=(a@a+F@+)*F@*
=(a@a+b@b@+)*F@*=(a@a+b@b@+)*c@c@*
将活动序列(a@a+b@b@+)*c@c@*中的动作符号去掉得到输入序列:(a+b)*c
所有动作符号组成的符号串即动作序列为:@a@b@+@c@*
去掉动作符号标记得到:ab+c*;由于翻译文法是在输入文法的产生式右部的适当位置插入动作符号形成的,因此,翻译文法产生的动作序列受输入语言的文法控制(语法制导)。
语法制导翻译:根据输入文法,分析各条产生式的语义(要求计算机所完成的操作),分别编出完成这些操作的子程序或程序段(称为语义子程序或语义动作),并把这些子程序或程序段的名字作为动作符号插入到输入文法各产生式右部的适当位置上,从而实现翻译文法。 ;*;自顶向下的语法制导翻译:递归下降翻译、LL(1)翻译。
递归下降翻译(在适当位置插入实现动作符号的子程序):;*;*;对于产生式 T→FT’
-用T1表示T’
T( )
{
if(ch∈FIRST(FT’))
{
F();
T1();
}
else
error();
};对于产生式T’ →*F @* T’|ε
FIRST(*F @* T’) = { * }
FOLLOW(T’) = { #, + , ) }
-用T1表示T’
T1 ( )
{if(ch==‘*’)
{ ch = getnextsymbol( );
F ( );OUT(“*”); T1 ( );
}
else if(ch∈FOLLOW(E’))return;
else
error( );
}
;对于产生式F→(E)|a@a| b@b| c@c
F ( )
{if(ch==‘a’){ch = getnextsymbol();OUT(“a”); }
else if(ch==‘b’){ch=getnextsymbol();OUT(“b”); }
else if(ch==‘c’){ch=getnextsymbol();OUT(“c”); }
else if(ch==‘(’)
{ ch = getnextsymbol(); E ( );
if(ch ==‘)’)ch = getnextsymbol();
}
else error();
};*;LL(1)翻译器 ;a……;波兰翻译文法:对于一个文法,当且仅当文法中每个产生式右部的所有动作符号都只出现在所有输入符号和非终结符号的右边,则称此类翻译文法为波兰翻译文法。
例:;状态 ;步骤 ;属性:指与文法符号的类型和值等有关的一些语义信息,在编译中用属性描述被处理对象的语义特征。
属性代表与文法符号相关的语义信息。
属性的设置和语法结构的语义以及翻译程序的需要有关。例如:
文法符号X的类型属性:X.type
文法符号X的值属性:X.val
文法符号X的代码序列:X.code
文法符号X的内存:X.place
文法符号X的符号表入口指针: X.entry等。;*;*;例:设计一个语法分析程序接受算术表达式,并通过添加动作符号输出表达式的值。
已知符号串翻译文法如下: ;改写每一个产生式,添加符号属性变量名,并定义符号属性之间的关系即属性求值规则(语义规则),得到:;S;*;例:声明语句文法
① 声明语句→TYPE ID变量表;
② 变量表
文档评论(0)