语法分析器的设计与实现

上传人:汽*** 文档编号:487122675 上传时间:2023-11-26 格式:DOCX 页数:5 大小:84.40KB
返回 下载 相关 举报
语法分析器的设计与实现_第1页
第1页 / 共5页
语法分析器的设计与实现_第2页
第2页 / 共5页
语法分析器的设计与实现_第3页
第3页 / 共5页
语法分析器的设计与实现_第4页
第4页 / 共5页
语法分析器的设计与实现_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《语法分析器的设计与实现》由会员分享,可在线阅读,更多相关《语法分析器的设计与实现(5页珍藏版)》请在金锄头文库上搜索。

1、辅导教师成绩实验日期实验时间1实验名称语法分析器的设计与实现2、实验目的掌握自上而下语法分析方法、自下而上语法分析方法3、实验要求(1) 实验内容:四选一 设计及实现能够识别表达式的预测分析程序。文法如下:GE:E-E+T|TT-T*F|FF-(E)|i 设计及实现能够识别表达式的LR分析程序。文法如下:GE:E-E+T|TT-T*F|FF-(E)|i 设计及头现能够识别表达式的算符优先分析程序。文法如下:GE:E-E+T|TT-T*F|FF-PTF|PP-(E)|i 设计及实现计算表达式的计算器。表达式中可包含+、-、*、/、(、)运算符。(2) 实验要求:对已给的一个二元式形式表达式,能够

2、检查有无语法错误。并指定出错位置。将表达式的语法树输出(或将语法分析过程输出)。4、实验原理根据自上而下和自下而上的语法分析思想实现语法分析程序。5、实验步骤(1) 根据文法构造语法分析表。(2) 编写总控程序实现语法分析。6、状态转换图及词法分析程序#include#include#inelude#ineludeusingnamespacestd;charVn=E,e,T,t,F;定义文法的非终结符,小写字母e表示EcharVt=i,+,*,(,),#;/定义文法的终结符intLENVt=sizeof(Vt);voidshowstack(stackst)/从栈底开始显示栈中的内容inti,j

3、;charch100;j=st.size();for(i=0;i=0;i-)coutchi;st.push(chi);intfind(charc,chararray,intn)/查找函数,返回布尔值inti;intflag=0;for(i=0;in;i+)if(c=arrayi)flag=1;returnflag;intlocation(charc,chararray)/定位函数,指出字符所在位置,即将字母转换为数组下标值inti;for(i=0;c!=arrayi;i+);returni;voiderror()coutvv出错!vvendl;voidanalyse(charVn,charVt

4、,stringM56,stringstr)inti,j,p,q,h,flag=1;chara,X;stackst;st.push(#);st.push(Vn0);j=0;h=1;a=strj;cout步骤所用产生式endl;while(flag=1)coutvvhvvh+;showstack(st);cout/定义堆栈/#与识别符号入栈j指向输入串的指针分析栈剩余输入串/显示步骤/显示分析栈中内容/显示剩余字符串取栈顶符号放入X/X是终结符/分析栈的栈顶元素和剩余输X匹配endl;/读入输入串的下一字符接受!endlendlfor(i=j;istr.size();i+)coutstri;X=s

5、t.top();if(find(X,Vt,LENVt)=1)if(X=a)入串的第一个元素相比较if(X!=#)coutst.pop();a=str+j;elsecoutflag=0;elseerror();break;elsep=location(X,Vn);/实现下标的转换(非终结符转换为行下标)q=location(a,Vt);/实现下标的转换(终结符转换为列下标)stringS1(NULL),S2(nuII);if(Mpq=S1|Mpq=S2)/查找二维数组中的产生式error();break;/对应项为空,则出错elsestringstr0=Mpq;coutXstr0=0;i-)st

6、.push(strOi);产生式右端逆序进栈main()stringM56=Te,NULL,NULL,Te,NULL,NULL,NULL,+Te,NULL,NULL,$,$,Ft,NULL,NULL,Ft,NULL,NULL,NULL,$,*Ft,NULL,$,$,i,NULL,NULL,(E),NULL,NULL;/预测分析表jstringstr;interrflag,i;cout文法:E-E+T|TT-T*F|FF-(E)|iendl;cout请输入分析串(以#结束):str;for(i=0;istr.size();i+)if(!find(stri,Vt,LENVt)coutvv输入串中包含有非终结符stri(输入错误)!endl;errflag=1;Ewhile(errflag=1);/判断输入串的合法性analyse(Vn,Vt,M,str);return0;7、测试及结果8心得如果有需要的请下载,并我只是图方便转发一下

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

当前位置:首页 > 学术论文 > 其它学术论文

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