实验二语法分析程序设计与实现

上传人:干*** 文档编号:164971413 上传时间:2022-10-26 格式:DOCX 页数:14 大小:59.70KB
收藏 版权申诉 举报 下载
实验二语法分析程序设计与实现_第1页
第1页 / 共14页
实验二语法分析程序设计与实现_第2页
第2页 / 共14页
实验二语法分析程序设计与实现_第3页
第3页 / 共14页
资源描述:

《实验二语法分析程序设计与实现》由会员分享,可在线阅读,更多相关《实验二语法分析程序设计与实现(14页珍藏版)》请在装配图网上搜索。

1、实验二-语法分析程序设计与 实现一、实验目的任选一种有代表性的语法分析方法,如算符优先法、递归下降法、LL(1)、 SLR(1)、LR等,通过设计、编制、调试实现一个典型的语法分析程序,对实 验一所得扫描器提供的单词序列进行语法检査和结构分析,实现并进一步掌握 常用的语法分析方法。二、基本实验内容与要求选择对各种常见高级程序设计语言都较为通用的语法结构一算术表达式 的一个简化子集一作为分析对象,根据如下描述其语法结构的BNF定义G2 算术表达式 ,任选一种学过的语法分析方法,针对运算对象为无符号常数和 变量的四则运算,设计并实现一个语法分析程序。G2算术表达式:算术表达式f 项 | 算术表达式

2、+ 项 |算术表达式 -项项 f 因式| 项*因式| 项/ 因式因式f 运算对象 | (编术表达式)若将语法范畴算术表达式、项、因式和运算对象分别用E、T、F 和i代表,则G2可写成:G2E: E f T | E+T | E-T T f F | T*FT/F F f i | (E)输入:由实验一输出的单词串,例如:UCON,PL, UCON,MU, ID输出:若输入源程序中的符号串是给定文法的句子,则输出“ RIGHT”,并 且给出每一步分析过程;若不是句子,即输入串有错误,则输出“ ERROR”,并 且显示分析至此所得的中间结果,如分析栈、符号栈中的信息等,以及必要的 出错说明信息。要求:1

3、、确定语法分析程序的流程图,同时考虑相应的数据结构,编写一个语法 分析源程序。2、将词法、语法分析合在一起构成一个完整的程序,并调试成功。3、供测试的例子应包括符合语法规则的语句及分析程序能判别的若干错例。 对于所输入的字符串,不论对错,都应有明确的信息输出。三、问题分析及源程序LL1文法:改写文法为:E_TGG+TG:.g2sis2flT-FSF-TGGS-*FST-/FSS-TF-(E)G-i分析表: i+*/()#EeeGgglg2g2TttSs2s2ssls2s2FflfLL1源程序#include #include#include#includechar A30;char B30;c

4、harv120 = i,+,/*终结符“char v220 = E,G,T,S,F;int j=0,b=0, top=0,l;class typepublic:char origin;char array5;int length;type e,t ,g,g1,g2,s,s1,s2,f,f1;type C1010;void pri nt()int a;for(a=0;a=top+1;a+)coutAa;分析梯/剩余串*/非终结符*/为输入串长度“产生式类型定义*/大写字符*/产生式右边字符*/字符个数*/类对象*/预测分析表*/输出分析栈*/couttt;void print1()输/*出剩余串

5、*/int j;for(j=0;jb;j+) cout;for(j=b;j=l;j+) coutBj;coutttt;void main()输出对齐符*/int m,n,k=0,flag=0,finish=0; char ch,x;type cha;/*把文法产生式赋值结构体*/e.o rigin=E; strcpy(e.array,TG);e.leng th=2;t.origin= T ;strcpy (t. array,FS);t.l eng th=2;g. origin=G;用*来接受Cmn*/strcpy(g.array,+TG);g.length=3;g1.origin=G;strc

6、py(g1.array,-TG);g1.length=3;g2.origin=G;g2 arrayO=c;g2.leng th=1;s.origin=S;strcpy(s.array,*FS);s.leng th=3;s1 origin=S;st rcpy(s1 array,/FS);sl.leng th=3;s2 origin=S;s2 arrayO=;s2l eng th=1;f.origin= F ;st rcpy(f array,(E);f.leng th=3;f1 origin=F;f1 arrayO=i;fl.leng th=1;for(m=0;m=4;m+)初始化分析表*/for

7、(n=0;n=7;n+)Cmnorigin=N;/全*部赋为空*/*填充分析表*/C00=e;C05=e;C11=g;C12=g1;C16=g2;C17=g2;C20=t;C25=t;C31=s2;C32=s2;C33=s;C34=s1;C36=s2;C37=s2;C40=f1;C45=f;cout提示:本程序只能对由 i,+,*,/,(,)构成的以#结束 的字符串进行分析n;cout输入要分析的字符串;do/*读入分析串*/cinch;if(ch!=i)&(ch!=+)&(ch!=-)&(ch!=*)&(ch!=7)&(ch!=()&(ch!=)&(ch !=#)cout 输入串中有非法字符

8、n;exi t(1);强制退出程序Bj=ch;j+;wh il e(ch!=#);l=j;/*分析串长度*/ch=B0;/*当前分析字符*/At op=#; A+t op=E;/*#,E进栈*/cout步骤 tt分析栈tt剩余字符tt所用产生式n;dox=A top;/*x为当前栈顶字符*/coutk+;cout tt;for(j=0;j=7;j+)/判断是否为终结符*/ if(x=v1j)flag=1;break;if(flag=1)/*如 果是终结符*/if(x=#)finish=1;/*结束标记“cout acc!endl;/*接受 */get char();exi t(1);/退出程序

9、/*if*/if(x=ch)print();print1();cout |匹配endl;ch=B+b;/*下 一个输入字符*/flag=O;/*恢复标记*/else/*出错处理*/ print();print1();cout 出错endl;/*输出出错终结符*/ exi t(1);else/*非终结符处理“for(j=0;j=4;j+)if(x=v2j)m=j;/*行号*/ break;for(j=0;jTG1*1-141T-FSF-iED配S-*FS匹配i-iflF-1i-itt匹配-iU一-iflG-TG一 ill匹配ittT-FSittF-iifl匹配Us-AtlG一乂G:Microsoft Visual StudioMyProiectsxxxxDebugxxxx.exer:i栈 鳖析 住分ttE 肇序i#F xI s s sG G c Gn # ft utt ft剩余字符i*/iIStt*/i*/i#Sit/itt”构成的丹肝结束的字符串迸行分析.所用产生式E-TG I-fS F-iS-AG-*1GPress any key to continue

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!