语法分析lr分析器

语法分析lr分析器

ID:6712983

大小:52.50 KB

页数:6页

时间:2018-01-23

语法分析lr分析器_第1页
语法分析lr分析器_第2页
语法分析lr分析器_第3页
语法分析lr分析器_第4页
语法分析lr分析器_第5页
资源描述:

《语法分析lr分析器》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第4次上机—语法分析2目的:熟练掌握自下而上的语法分析方法,并能用程序实现。要求:1.使用如下文法:E®E+T

2、TT®T*F

3、FF®(E)

4、id2.对于任意给定的输入串(词法记号流)进行语法分析,要求采用LR分析器来完成。手工构造LR分析表,利用移进-归约分析算法(P69图3.12)输出(P70表3.8)对应的动作部分。如:输入:id*+id/(id+id)#输出:移进按F->id归约移进error……3.要有一定的错误处理功能。即对错误能提示,并且能在一定程度上忽略尽量少的记号来进行接下来的分析。例如:从状态0开始的记号流为:b

5、m将b移进之后,栈里的情况应该为:0b2此时查表发现action[2,m]=error输出打印:error把A和状态1相继压入栈,用户指针后移到FOLLOW(A)对应的元素继续分析。0......栈.....a..A发现错误I0:C®a·AcA®·bn...I1C®aA·c...AI2A®b·n...b扩展:1.利用P92页的表3.13的方式将错误进行分类提示,即给出具体的出错信息。2.在已有文法的基础上再加上减法“-”和除法“/”对应的产生式构成最终的文法。从而使得记号流可以处理带括号的加、减、乘、除四则运算。代码实现:#inc

6、lude#includeusingnamespacestd;stacksymbol;stackstate;charsen[50];charsym[12][6]={//符号表{'s','e','e','s','e','e'},{'e','s','e','e','e','a'},{'r','r','s','r','r','r'},{'r','r','r','r','r','r'},{'s','e','e','s','e','e'},{'r','r','r','r','r','r'

7、},{'s','e','e','s','e','e'},{'s','e','e','s','e','e'},{'e','s','e','e','s','e'},{'r','r','s','r','r','r'},{'r','r','r','r','r','r'},{'r','r','r','r','r','r'}};charsnum[12][6]={//数字表{5,1,1,4,2,1},{3,6,5,3,2,0},{2,2,7,2,2,2},{4,4,4,4,4,4},{5,1,1,4,2,1},{6,6,6,6,6,6},{5,

8、1,1,4,2,1},{5,1,1,4,2,1},{3,6,5,3,11,4},{1,1,7,1,1,1},{3,3,3,3,3,3},{5,5,5,5,5,5}};intgo2[12][3]={//goto表{1,2,3},{0,0,0},{0,0,0},{0,0,0},{8,2,3},{0,0,0},{0,9,3},{0,0,10},{0,0,0},{0,0,0},{0,0,0},{0,0,0}};voidaction(inti,char*&a,char&how,int&num,char&A,int&b)//action函数[

9、i,a]{intj;switch(*a){case'i':j=0;break;case'+':j=1;break;case'*':j=2;break;case'(':j=3;break;case')':j=4;break;case'#':j=5;break;default:j=-1;break;}if(j!=-1){how=sym[i][j];num=snum[i][j];if(how=='r'){switch(num){case1:A='E',b=3;cout<<"按E->E+T规约"<

10、E',b=1;cout<<"按E->T规约"<T*F规约"<F规约"<(E)规约"<id规约"<

11、h(A){case'E':returngo2[t][0];break;case'T':returngo2[t][1];break;case'F':returngo2[t][2];break;}}voiderror(inti,intj,char*&a

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

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

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