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

    语法分析LR分析器.doc

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

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

    语法分析LR分析器.doc

    Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-date语法分析LR分析器第三次上机语法分析2第4次上机语法分析2目的:熟练掌握自下而上的语法分析方法,并能用程序实现。要求:1. 使用如下文法:E ® E+T | T T ® T*F | F F ® (E) | id2. 对于任意给定的输入串(词法记号流)进行语法分析,要求采用LR分析器来完成。手工构造LR分析表,利用移进-归约分析算法(P69 图3.12)输出(P70 表3.8)对应的动作部分。如:输入:id*+id/(id+id)#输出:移进按 F->id归约 移进 error 3. 要有一定的错误处理功能。即对错误能提示,并且能在一定程度上忽略尽量少的记号来进行接下来的分析。例如:从状态0开始的记号流为:bm将b移进之后,栈里的情况应该为: 0 b 2此时查表发现 action2,m=error输出打印:error把A和状态1相继压入栈,用户指针后移到FOLLOW(A)对应的元素继续分析。0.栈. . . . a . .A发现错误I0 :C®a ·AcA®· bn. . .I 1C®a A ·c. . .AI 2A®b · n. . .b扩展:1.利用P92页的表3.13的方式将错误进行分类提示,即给出具体的出错信息。2. 在已有文法的基础上再加上减法“-”和除法“/”对应的产生式构成最终的文法。从而使得记号流可以处理带括号的加、减、乘、除四则运算。代码实现:#include<iostream>#include<stack>using namespace std;stack<char> symbol;stack<int> state;char sen50;char sym126=/符号表 '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', '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'char snum126=/数字表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,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;int go2123=/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;void action(int i,char *&a,char &how,int &num,char &A,int &b)/action函数i,aint j;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=symij; num=snumij; if(how='r') switch(num) case 1: A='E',b=3; cout<<"按E->E+T规约"<<endl; break; case 2: A='E',b=1; cout<<"按E->T规约"<<endl; break; case 3: A='T',b=3; cout<<"按T->T*F规约"<<endl; break; case 4: A='T',b=1; cout<<"按T->F规约"<<endl; break; case 5: A='F',b=3; cout<<"按F->(E)规约"<<endl; break; case 6: A='F',b=1; cout<<"按F->id规约"<<endl; break; default: break; int go(int t,char A)/gotot,Aswitch(A)case 'E': return go2t0;break;case 'T': return go2t1;break;case 'F': return go2t2;break;void error(int i,int j,char *&a)/error处理函数cout<<"error"<<endl;switch(j)case 1:/期望输入id或左括号,但是碰到+,*,或$,就假设已经输入id了,转到状态5 state.push(5); symbol.push('i');/必须有这个,如果假设输入id的话,符号栈里必须有. cout<<"缺少运算对象id"<<endl; break;case 2:/从输入中删除右括号 a+; cout<<"不配对的右括号"<<endl; break;case 3:/期望碰到+,但是输入id或左括号,假设已经输入算符+,转到状态6 state.push(6); symbol.push('+'); cout<<"缺少运算符"<<endl; break;case 4:/缺少右括号,假设已经输入右括号,转到状态11 state.push(11); symbol.push(')'); cout<<"缺少右括号"<<endl; break;case 5: a+; cout<<"*号无效,应该输入+号!"<<endl;case 6: a+;int main()int s;char *a;char how;int num;int b;char A;while(1) cin>>sen; a=sen; state.push(0);/先输入0状态 while(*a!='0') b=0;num=0;how='0'A='0' s=state.top(); action(s,a,how,num,A,b); if(how='s')/移进 cout<<"移进"<<endl; symbol.push(*a); state.push(num); / if(*a='i') / a+;/在这里忽略i后面的d a+; else if(how='r')/规约 for(int i=0;i<b;i+) if(!state.empty() state.pop(); if(!symbol.empty() symbol.pop(); int t=state.top(); symbol.push(A); state.push(go(t,A); else if(how='a')/接受 break; else error(s,num,a);/错误处理 cout<<"成功接受"<<endl;return 0;-

    注意事项

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

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




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

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

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

    收起
    展开