编译原理实验二预测分析法

上传人:206****923 文档编号:91803905 上传时间:2019-07-02 格式:DOC 页数:9 大小:83.02KB
返回 下载 相关 举报
编译原理实验二预测分析法_第1页
第1页 / 共9页
编译原理实验二预测分析法_第2页
第2页 / 共9页
编译原理实验二预测分析法_第3页
第3页 / 共9页
编译原理实验二预测分析法_第4页
第4页 / 共9页
编译原理实验二预测分析法_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《编译原理实验二预测分析法》由会员分享,可在线阅读,更多相关《编译原理实验二预测分析法(9页珍藏版)》请在金锄头文库上搜索。

1、实验二 预测分析法一、实验项目名称 预测分析法二、实验目的根据某一LL(1)文法编制调试预测分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对预测分析法的理解。三、实验环境 Win8系统,VC+6.0软件,C语言开发工具四、实验内容本次实验的LL(1)文法为表达式文法:EE+T | TTT*F | FFi | (E)编写识别表达式文法的合法句子的预测分析程序,对输入的任意符号串,给出分析过程及分析结果。分析过程要求输出步骤、分析栈、剩余输入串和所用产生式。如果该符号串不是表达式文法的合法句子,要给出尽量详细的错误提示。五、实验步骤首先将终结符和非终结符以及预测分析表计算出来,

2、并保存到数组中然后对输入的字符进行分析,将一个个终结符进行分配在分配的过程中输出每一步步骤对错误处,显示步骤数和错误字符六、源程序清单、测试数据、结果源程序:#include#include #includeusing namespace std; char zhong6=i,+,*,(,),#;char fzhong5=E,R,T,Y,F; char shu20;/R代表E Y代表Tstring biao56=TR,TR,+TR, /代表空FY,FY,*FY,i,(E),;#define N 20;typedef char type;typedef structtype *base;type

3、 *top;int stacksize;sqstack;void initstack(sqstack &s)s.base=new type2;if(!s.base) cout错误;s.top=s.base;s.stacksize=N;void push(sqstack &s,type e)if(s.top-s.base=s.stacksize) cout栈满;*s.top+=e;void pop(sqstack &s,type &e)if(s.top=s.base) cout栈空;e=*-s.top;type gettop(sqstack s)if(s.top=s.base) cout栈空;r

4、eturn *(s.top-1);int find1(char x)for(int i=0;i5;i+)if(x=fzhongi)break;return i;int find2(char x)for(int i=0;i6;i+)if(x=zhongi)break;return i;void showstack(sqstack fen)char a;sqstack x;initstack(x);while(fen.top!=fen.base)pop(fen,a);push(x,a);while(x.top!=x.base)pop(x,a);couta;void fenxi(sqstack &f

5、en)string str;int i=0,row=1,j;char ch1,ch2;/ch1=gettop(fen);while(1)if(gettop(fen)=shui&gettop(fen)!=#)coutendlrow+;showstack(fen);j=i;cout;while(shuj!=#)coutshuj;j+;cout#shui被分配endl;i+;pop(fen,ch2);else if(gettop(fen)=#)coutrow#被接受;break;elsestr=biaofind1(gettop(fen)find2(shui);if(biaofind1(gettop(

6、fen)find2(shui)=)cout第row行出现错误gettop(fen)与shui无对应的关系endl;break;else if(biaofind1(gettop(fen)find2(shui)=)coutrow;showstack(fen);j=i;cout;while(shuj!=#)coutshuj;j+;cout#gettop(fen);for(j=0;jstr.length();j+) coutstr.at(j);coutendl;row+;pop(fen,ch2);j=0;elsecoutrow;showstack(fen);j=i;cout;while(shuj!=#

7、)coutshuj;j+;cout#gettop(fen);for(j=0;jstr.length();j+) cout=0)push(fen,str.at(j);j-;coutendl;void main()cout这里是预测分析法程序测试!endl;cout请输入一串仅含i,+,*,(,)的字符串,并以#结束a;shui=a;i+;cout对输入串:shu的分析过程endl;initstack(fen);push(fen,#);push(fen,E);fenxi(fen);运行结果截图:测试一:测试二:测试三:(错误测试)七、实验小结和思考预测分析法相对于RL法简单很多,而且预测分析表已经得到。直接按照书上一步步编程就好。试验中遇到几个问题:1.首次在C语言中使用string引用,不知道如何输出。2. 栈输出时,顺序是倒的。3.实验调试成功后莫名其妙地出现几行空白这些问题,第一个通过网络了解了string类型的使用得到了解决,第二个问题自己编个函数也行,就是第三个问题,我找了半天没有发现那里有多余的换行输出符,我预测可能是我调试的时候多加了一个(由于我的C语言版本使用debug断点调试会出现错误,我使用的是最原始的调试),不过也无伤大雅。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号