欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    实验二--语法分析程序设计与实现(共11页).docx

    • 资源ID:7049941       资源大小:110.38KB        全文页数:11页
    • 资源格式: DOCX        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    实验二--语法分析程序设计与实现(共11页).docx

    精选优质文档-倾情为你奉上实验二 语法分析程序设计与实现一、实验目的任选一种有代表性的语法分析方法,如算符优先法、递归下降法、LL(1)、SLR(1)、LR(1)等,通过设计、编制、调试实现一个典型的语法分析程序,对实验一所得扫描器提供的单词序列进行语法检查和结构分析,实现并进一步掌握常用的语法分析方法。二、基本实验内容与要求选择对各种常见高级程序设计语言都较为通用的语法结构算术表达式的一个简化子集作为分析对象,根据如下描述其语法结构的BNF定义G2<算术表达式>,任选一种学过的语法分析方法,针对运算对象为无符号常数和变量的四则运算,设计并实现一个语法分析程序。G2<算术表达式>:<算术表达式> <项> | <算术表达式>+<项> | <算术表达式>-<项><项> <因式> | <项>*<因式> | <项>/<因式><因式> <运算对象> | (<算术表达式>)若将语法范畴<算术表达式>、<项>、<因式>和<运算对象>分别用E、T、F和i代表,则G2可写成:G2E:E T | E+T | E-T T F | T*F | T/F F i | (E)输入:由实验一输出的单词串,例如:UCON,PL,UCON,MU,ID ······输出:若输入源程序中的符号串是给定文法的句子,则输出“RIGHT”,并且给出每一步分析过程;若不是句子,即输入串有错误,则输出“ERROR”,并且显示分析至此所得的中间结果,如分析栈、符号栈中的信息等,以及必要的出错说明信息。要求:1、确定语法分析程序的流程图,同时考虑相应的数据结构,编写一个语法分析源程序。2、将词法、语法分析合在一起构成一个完整的程序,并调试成功。3、 供测试的例子应包括符合语法规则的语句,及分析程序能判别的若干错例。对于所输入的字符串,不论对错,都应有明确的信息输出。三、问题分析及源程序LL1文法:改写文法为:E- >TG e G> +TG gT- >FS tF- >-TG g1G- > g2S- >*FS sT- >/FS s1S- > s2F- >(E) fG- >i f1分析表:i+-*/()#EeeGgg1g2g2TttSs2s2ss1s2s2Ff1fLL1源程序#include<iostream.h>#include<stdio.h> #include<stdlib.h>#include<string.h>char A30; /*分析栈*/char B30; /*剩余串*/char v120='i','+','-','*','/','(',')','#' /*终结符*/char v220='E','G','T','S','F' /*非终结符*/ int j=0,b=0,top=0,l; /*L为输入串长度*/class type /*产生式类型定义*/public:char origin; /*大写字符*/char array5; /*产生式右边字符 */int length; /*字符个数*/;type e,t,g,g1,g2,s,s1,s2,f,f1; /*类对象*/type C1010; /*预测分析表*/void print() /*输出分析栈*/int a;for(a=0;a<=top+1;a+)cout<<Aa;cout<<"tt"void print1() /*输出剩余串*/int j;for(j=0;j<b;j+) /*输出对齐符*/cout<<" "for(j=b;j<=l;j+)cout<<Bj;cout<<"ttt"void main()int m,n,k=0,flag=0,finish=0;char ch,x;type cha; /*用来接受Cmn*/*把文法产生式赋值结构体*/e.origin='E'strcpy(e.array,"TG");e.length=2;t.origin='T'strcpy(t.array,"FS");t.length=2;g.origin='G'strcpy(g.array,"+TG");g.length=3;g1.origin='G'strcpy(g1.array,"-TG");g1.length=3;g2.origin='G'g2.array0=''g2.length=1; s.origin='S'strcpy(s.array,"*FS");s.length=3;s1.origin='S'strcpy(s1.array,"/FS");s1.length=3;s2.origin='S's2.array0=''s2.length=1;f.origin='F'strcpy(f.array,"(E)");f.length=3;f1.origin='F'f1.array0='i'f1.length=1;for(m=0;m<=4;m+) /*初始化分析表*/for(n=0;n<=7;n+)Cmn.origin='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/*读入分析串*/ cin>>ch; if (ch!='i') &&(ch!='+')&&(ch!='-')&&(ch!='*')&&(ch!='/')&&(ch!='(')&&(ch!=')')&&(ch!='#') cout<<"输入串中有非法字符n" exit(1); /强制退出程序 Bj=ch; j+; while(ch!='#'); l=j;/*分析串长度*/ ch=B0;/*当前分析字符*/ Atop='#' A+top='E'/*'#','E'进栈*/ cout<<"步骤tt分析栈 tt剩余字符 tt所用产生式 n" do x=Atop-;/*x为当前栈顶字符*/ cout<<k+; cout<<"tt" for(j=0;j<=7;j+)/*判断是否为终结符*/ if(x=v1j) flag=1; break; if(flag=1)/*如果是终结符*/ if(x='#') finish=1;/*结束标记*/ cout<<"acc!"<<endl;/*接受 */ getchar(); exit(1); /退出程序 /*if*/ if(x=ch) print(); print1(); cout<<"匹配"<<endl; ch=B+b;/*下一个输入字符*/ flag=0;/*恢复标记*/ else/*出错处理*/ print(); print1(); cout<<"出错"<<endl;/*输出出错终结符*/ exit(1); else/*非终结符处理*/ for(j=0;j<=4;j+)if(x=v2j)m=j;/*行号*/break; for(j=0;j<=7;j+)if(ch=v1j)n=j;/*列号*/break; cha=Cmn; if(cha.origin!='N')/*判断是否为空*/ print();print1();cout<<cha.origin<<"->" /*输出产生式*/for(j=0;j<cha.length;j+) cout<<cha.arrayj;cout<<"n"for(j=(cha.length-1);j>=0;j-) /*产生式逆序入栈*/A+top=cha.arrayj;if(Atop='')/*为空则不进栈*/top-;else/*出错处理*/print();print1();cout<<"出错"<<endl;/*输出出错非终结符*/exit(1); while(finish=0);运行结果:专心-专注-专业

    注意事项

    本文(实验二--语法分析程序设计与实现(共11页).docx)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开