如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
语法制导翻译属性翻译文法及其应用第6章语法制导翻译技术第6章语法制导翻译技术第6章语法制导翻译技术第6章语法制导翻译技术第6章语法制导翻译技术6.1翻译文法6.1翻译文法6.1翻译文法6.1翻译文法6.1翻译文法6.2语法制导翻译(P122)6.2语法制导翻译6.3自顶向下语法制导翻译(P123)6.3自顶向下语法制导翻译处理T的递归下降翻译程序流程图处理F的递归下降翻译程序流程图6.3自顶向下语法制导翻译6.3自顶向下语法制导翻译6.3自顶向下语法制导翻译6.3自顶向下语法制导翻译6.3自顶向下语法制导翻译6.4属性翻译文法(P128)6.4属性翻译文法6.4属性翻译文法6.4属性翻译文法6.4属性翻译文法6.4属性翻译文法6.4属性翻译文法6.4属性翻译文法6.4属性翻译文法6.4属性翻译文法S6.4属性翻译文法6.4属性翻译文法6.4属性翻译文法6.4属性翻译文法6.4属性翻译文法6.5属性文法的自顶向下翻译(P133)6.5属性文法的自顶向下翻译6.5属性文法的自顶向下翻译例(P135)产生式L↑a↓b→E↓iR↓ji,j=b,a=i+2L↑x↓y→H↑z↓ww=y,z=2,x=z+y按约定2,应改成L↑a↓b→E↓iiR↓ji,j=b,a=j+2L↑a↓b→H↑z↓ww=b,z=2,a=z+b对规则S→A↑aB↓bC↓c,当b,c=a时,可写成:S→A↑aB↓aC↓a对规则L↑a→A↓b@f↓c,当a=b,c=b时,可写成:L↑a→A↓a@f↓a对规则L↓a↑b→aB↓cC↓d,当c,d=a时,可写成:L↓a↑b→aB↓aC↓a但当b=a时,上式不能写成L↓a↑a→aB↓aC↓a这是因为过程L(inta,intb)不可写成L(inta,inta)。6.5属性文法的自顶向下翻译6.5属性文法的自顶向下翻译6.5属性文法的自顶向下翻译6.5属性文法的自顶向下翻译6.5属性文法的自顶向下翻译6.5属性文法的自顶向下翻译//产生式E'↓p↑t→+T↑r@ADD↓p,r,t0E'↓t0↑t|ε的翻译子程序,其中,p为继承属性,形参用整型变量,t为综合属性,形参用指针变量intE1(intp,int*t){intr,es=0,t0;if(ch=='+'){ch=getchar();es=T(&r);t0=NEWT();//产生一个临时变量printf("ADD,%c,%c,%c\n",p,r,t0);es=E1(t0,t);return(es);}else{*t=p;return(0);}}//返回一个临时变量,顺序产生A、B、...、Z,最多产生26个临时变量intNEWT(){staticinti=64;//设置i为静态变量确保下次调用时i为上次调用的结果i=i+1;return(i);}6.5属性文法的自顶向下翻译//产生式T'↓p↑t→*F↑r@MULT↓p,r,t0T'↓t0↑t|ε的翻译子程序intT1(intp,int*t){intr,es=0,t0;if(ch=='*'){ch=getchar();es=F(&r);t0=NEWT();//产生一个临时变量printf("MULT,%c,%c,%c\n",p,r,t0);es=T1(t0,t);return(es);}else{*t=p;return(0);}}//产生式F↑p→(E↑p)|ID↑p的翻译子程序intF(int*p)//分析F子程序{intes=0;if(ch=='('){ch=getchar();es=E(p);//调分析E子程序if(ch!=')')return(3);else{ch=getchar();return(es);}}else{if(isalpha(ch))//判断是否为字母{*p=ch;ch=getchar();return(es);}elsereturn(4);}}6.5属性文法的自顶向下翻译6.5属性文法的自顶向下翻译6.5属性文法的自顶向下翻译符号6.5属性文法的自顶向下翻译6.5属性文法的自顶向下翻译根据设计好的栈符号,对属性翻译文法构造LL(1)分析表。6.5属性文法的自顶向下翻译6.5属性文法的自顶向下翻译6.5属性文法的自顶向下翻译6.5属性文法的自顶向下翻译6.5属性文法的自顶向下翻译6.5属性文法的自顶向下翻译小结习题(P147)习题作业