欢迎来到天天文库
浏览记录
ID:14842882
大小:199.50 KB
页数:25页
时间:2018-07-30
《算符优先分析方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、目录1.课程设计的目的与原理11.1设计目的11.2设计原理12.课程设计环境13.课程设计内容23.1算符优先分析流程图23.2算符优先总流程图33.3算符优先文法43.4程序调试54.总结6附录62424算符优先分析方法1.课程设计目的与原理1.1设计目的1.了解利用算符优先算法进行移进规约分析的方法 。2.锻炼和提高自己的编程能力。3.熟悉编译原理语法分析的方法,加深对算符优先基本方法的了解。4.进一步理解编译原理,更好的的学习它的思路,掌握编译原理的理论基础。5.了解算符优先分析和规范规约的不同以及优缺点。1.2
2、设计原理算符优先分析方法是根据算符之间的优先关系而设计的一种自底向上的语法分析方法。算符优先分析的基本思想是只规定算符之间的优先关系,也就是只考虑终结符之间的优先关系。由于算符优先分析不考虑非终结符之间的优先关系,在归约过程中只要找到可归约串就归约,并不考虑归约到哪个非终结符,因而算符优先归约不是规范归约。2.课程设计环境1.硬件运行环境:WindowsXP2.软件运行环境:VC++6.0版本243.课程设计内容3.1算符优先分析流程图k:=k+1s[k]=a置初值块:k:=1,s[k]:=”#”下一个输入符读入as[k
3、]∈VTYNj:=kj:=k-1s[j]>a?Q:=s[j]s[j]4、法分析表输入需要验证的字符串,以#结束输出结果输出结果结束输入文法规则和数目NY243.3算符优先文法例已知表达式文法为:E->E+TE->TT->T*FT->FF->(E)F->i⑴计算FIRSTVE和LASTVT集合FirstVT(E)={+,*,(,i}LastVT(E)={+,*,),i}FirstVT(T)={*,(,i}LastVT(T)={*,),i}FirstVT(F)={(,i}LastVT(F)={),i}FirstVT(Q)={#}LastVT(Q)={#}⑵构造算符优先矩阵 +*()i#+><<>5、<>*>><><>(<<<=<)>>>>i>> > > #<<< <= ⑶对于输入串i+i*i+i#的手动分析过程:步骤符号栈当前符号+剩余输入串移进或归约0#i+i*i+i#预备1#i+i*i+i#移进2#N+i*i+i#归约3#N+i*i+i#移进4#N+i*i+i#移进5#N+N*i+i#归约6#N+N*i+i#移进7#N+N*i+i#移进8#N+N*N+i#归约9#N+N+i#归约10#N+i#归约11#N+i#移进12#N+i#移进13#N+N#归约14#N#归约15#N#接受24见附录3.4程序调试例:1、6、输入产生式的个数:2、输入文法:3、判断文法4、生成非终结符的FIRSTVT集和LASTVT集:5、生成算符优先分析表:5、输入字符串进行分析:24输出结果与自己做的结果一模一样,说明设计成功。4.总结经过此次编译课程设计,使我对算符优先分析有了更深更进一步的理解,而且也锻炼了自己的程序编码能力,对自己今后的道路影响不小。当然还有不足之处以后会慢慢改进。在试验过程中,我忘记在程序最后面加上一句getchar();,导致我试验时,直接运行.exe文件,当运行到最后输入归约字符串时,执行完后界面自动关闭,导致我不能截图,经过7、不屑的努力,有两种解决方法,第一可以用VC软件运行,界面就不会关闭。第二种是在程序里加上getchar();,.exe文件运行到最后就不会自动关闭。附录#include#include#includetypedefstruct{charR;charr;24intflag;}array;typedefstruct{charE;chare;}charLode;typedefstruct{charLode*base;inttop;}charstack;charstr8、[80][80],arr[80][80],brr[80][80];arrayF[20];intm,kk,p,ppp,FF=1;charr[10];intcrr[20][20],FLAG=0;charccrr1[1][20],ccrr2[20][1];voidInitstack(charstack&s)//定义栈{s.
4、法分析表输入需要验证的字符串,以#结束输出结果输出结果结束输入文法规则和数目NY243.3算符优先文法例已知表达式文法为:E->E+TE->TT->T*FT->FF->(E)F->i⑴计算FIRSTVE和LASTVT集合FirstVT(E)={+,*,(,i}LastVT(E)={+,*,),i}FirstVT(T)={*,(,i}LastVT(T)={*,),i}FirstVT(F)={(,i}LastVT(F)={),i}FirstVT(Q)={#}LastVT(Q)={#}⑵构造算符优先矩阵 +*()i#+><<>
5、<>*>><><>(<<<=<)>>>>i>> > > #<<< <= ⑶对于输入串i+i*i+i#的手动分析过程:步骤符号栈当前符号+剩余输入串移进或归约0#i+i*i+i#预备1#i+i*i+i#移进2#N+i*i+i#归约3#N+i*i+i#移进4#N+i*i+i#移进5#N+N*i+i#归约6#N+N*i+i#移进7#N+N*i+i#移进8#N+N*N+i#归约9#N+N+i#归约10#N+i#归约11#N+i#移进12#N+i#移进13#N+N#归约14#N#归约15#N#接受24见附录3.4程序调试例:1、
6、输入产生式的个数:2、输入文法:3、判断文法4、生成非终结符的FIRSTVT集和LASTVT集:5、生成算符优先分析表:5、输入字符串进行分析:24输出结果与自己做的结果一模一样,说明设计成功。4.总结经过此次编译课程设计,使我对算符优先分析有了更深更进一步的理解,而且也锻炼了自己的程序编码能力,对自己今后的道路影响不小。当然还有不足之处以后会慢慢改进。在试验过程中,我忘记在程序最后面加上一句getchar();,导致我试验时,直接运行.exe文件,当运行到最后输入归约字符串时,执行完后界面自动关闭,导致我不能截图,经过
7、不屑的努力,有两种解决方法,第一可以用VC软件运行,界面就不会关闭。第二种是在程序里加上getchar();,.exe文件运行到最后就不会自动关闭。附录#include#include#includetypedefstruct{charR;charr;24intflag;}array;typedefstruct{charE;chare;}charLode;typedefstruct{charLode*base;inttop;}charstack;charstr
8、[80][80],arr[80][80],brr[80][80];arrayF[20];intm,kk,p,ppp,FF=1;charr[10];intcrr[20][20],FLAG=0;charccrr1[1][20],ccrr2[20][1];voidInitstack(charstack&s)//定义栈{s.
此文档下载收益归作者所有