《语法制导翻译技术》PPT课件

《语法制导翻译技术》PPT课件

ID:45661905

大小:320.50 KB

页数:61页

时间:2019-11-16

《语法制导翻译技术》PPT课件_第1页
《语法制导翻译技术》PPT课件_第2页
《语法制导翻译技术》PPT课件_第3页
《语法制导翻译技术》PPT课件_第4页
《语法制导翻译技术》PPT课件_第5页
资源描述:

《《语法制导翻译技术》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第6章语法制导翻译技术高级语言源程序经过词法分析、语法分析之后,如果没有错误,说明该源程序在书写上是正确的,符合语言的语法规则。词法分析和语法分析只检查了源程序的拼写、结构是否正确,但是对程序内部的逻辑含义并未考虑。语法上的正确并不能保证其语义是正确的。要判断语义是否正确,就必须依靠语义分析。这一章,我们所要介绍的是目前大多数编译程序普遍采用的一种技术,即语法制导翻译技术。在这种方法中,我们可以用一个或多个子程序(称为语义动作)来完成产生式的语义分析,并把这些语义动作插入到产生式中相应位置,从而形成翻译文法。当在语

2、法分析过程中使用该产生式时,就可以在适当的时机调用这些动作,完成所需要的翻译;进一步,可根据产生式所包含的语义,分析文法中每个符号的语义,并将这些语义以属性的形式附加到相应的符号上;再根据产生式所包含的语义,给出符号间属性的求值规则,从而形成所谓的属性翻译文法。这样,当在语法分析中使用该产生式时,可根据属性求值规则对相应属性进行求值,从而完成翻译。6.1翻译文法翻译文法是上下文无关文法的推广,是在描述语言文法规则的右部适当位置加入语义动作得到的。为了区分文法符号与语义动作,在文法的表示中,将代表语义动作的符号前面加

3、符号@来表示。如何来设计翻译文法呢?假设我们要设计一个翻译器,它能将中缀表达式翻译成波兰后缀表达式。我们可以想象该翻译器将如何进行这种翻译。假设输入串是a+b*c,则翻译器的输入输出动作是:READ(a)PRINT(a)READ(+)READ(b)PRINT(b)READ(*)READ(C)PRINT(C)PRINT(*)PRINT(+)其中READ表示输入操作,PRINT表示输出操作。在该序列中,若用输入符号本身直接表示读操作,用@表示表示输出操作,则上述序列可简化为:a@a+b@b*c@c@*@+这种带有@的符

4、号串称为活动序列。由PRINT操作所确定的输出结果是由紧跟在符号@之后的各符号组成,即abc*+。我们称@为动作符号标记,由符号@开始的符号串称为一个动作符号。这样,上面的活动序列中就有5个动作符号,分别为:@a、@b、@c、@*和@+。在这个例子中,我们可以把这些动作符号看成一些子程序的名字。这些子程序的功能就是打印动作符号中的输出符号。在有些应用中,动作符号用来表示更一般的具有特殊功能的子程序。6.1翻译文法上面的活动序列只说明了如何具体处理一个中缀表达式。为了能对所有中缀表达式翻译,就必须研究中缀表达式文法,

5、考虑能否在适当位置加入动作符号,使得能够产生含有能翻译成波兰后缀表达式的活动序列。假设中缀算术表达式文法为:为了构造能产生活动序列的文法,只需在规则右部的适当位置加入动作符号。对于该文法,为了读a之后能打印a,产生式⑥可写成:F→a@a。为了在打印两个操作数之后打印加法运算符,产生式①将变为:E→E+T@+,这个产生式可解释为:“对非终结符号E的分析可以看成是处理E,读+,再处理T并打印+”。对其他产生式作类似的改变以后可得文法为∶这种带有动作符号的文法就是我们称为翻译文法的一个例子。①E→E+T⑤F→(E)②E→

6、T⑥F→a③T→T*F⑦F→b④T→F⑧F→c①E→E+T@+⑤F→(E)②E→T⑥F→a@a③T→T*F@*⑦F→b@b④T→F⑧F→c@c6.1翻译文法从上例中我们可看到,中缀表达式文法和其翻译文法的产生式之间有对应关系,为了和翻译文法的称呼对应,现在,我们把中缀表达式文法叫做输入文法,使用中缀表达式文法通过推导可以得到终结符号串叫做输入序列,而通过翻译文法得到的符号串称为活动序列。因此通过输入文法推导能得到的输入序列,那么就能通过翻译文法得到相应的活动序列。从该活动序列中去掉所有动作符号就是输入序列,而所有动

7、作符号组成的符号串称为动作序列。例如,对于符号串(a+b)*b用输入文法推导输入序列(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@*=>(

8、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@*6.1翻译文法翻译文法是上下无关文法。在这个文法中,终结符号集由输入符号和动作符号组成。由翻译文法确定的语言中的

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

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

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