文档详情

06第六章语法制导翻译技术.ppt

发布:2017-05-01约6.66千字共77页下载文档
文本预览下载声明
第6章 语法制导翻译技术 ;内容提要;6.1 引言;并行处理方式: 对文法中的每个产生式都附加一些动作(语义分析、操作符号表、代码生成等),在语法分析过程中,每当需要使用一个产生式进行推导或归约,语法分析程序除执行相应的语法分析动作外,还要执行相应的其它动作,完成语义分析和代码生成等工作。(边分析边翻译) 并行处理方式涉及几个概念 翻译文法 语法制导翻译 属性翻译文法 ;翻译文法:是上下文无关文法的推广,通过在描述语言规则的文法产生式右部的适当位置加入动作而得到的文法 。;例:构造中缀表达式文法的翻译文法。;例:对于符号串(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变量表; ② 变量表→,ID变量表 ③ 变量表→ε 其中TYPE可为int,real,bool 假设词法分析程序输出单词符号时,对变量名输出单词记号ID和变量名;对TYPE输出单词记号TYPE和类型名。 构造语法分析程序,能输出变量名及其类型 ;1、添加语义动作@SET_TYPE输出变量名及类型,因此@SET_TYPE带有两个属性,即变量名和类型: @SET_TYPE↓n1,t1 语法分析程序读到一个变量后,调用SET_TYPE。因此文法改写为: (1) 声明语句→TYPE ID@SET_TYPE 变量表;
显示全部
相似文档