

下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、算符优先分析器源代码:#include #include#define MAX 100 using namespace std; struct Stack / 符号栈char dataMAX;int top;char Terminal6=;,(,),a,+,#; / 终结符集合 char Table66= / 算符优先关系表, , , ,IJJJJJJ J, , =, , , , , !, , , , , !, , , , , !, , !, , !, =;/判断是否为终结符,是返回其所在位置i,否则返回-1int Is_Vt(char ch,char Terminal6)int i; for
2、(i=0;i6;i+)if(ch=Terminali) / 输入符为终结符 return i;return -1;/ 读入输入串,返回其长度int Getchar(int length,char StringMAX)int i;coutlength;coutendl* 该输入串为: ;for(i=0;iStringi;return length;void PrintStack(Stack &st, int top) / 输出栈中的内容for(int i=0;i=top;i+)coutst.datai ; cout tt;int main()Stack st;int length=0,L
3、en,k;char StringMAX,ch;Len=Getchar(length,String); / 获得输入串 int j=0;ch=Stringj; / 指向第一个输入符 st.top=0;st.datast.top=#; / 将 #入栈coutendl*cout 符 号 栈 setw(15) 当 前 符 号 setw(15) 剩 余 输 入串 setw(20) 移进或归约 endl; / 输出格式while(st.top!=1 | ch!=#)if(Is_Vt(ch,Terminal)!=-1) / 输入符为终结符k=Is_Vt(ch,Terminal); / 获取分析表 Table
4、 的第二个下标 int m,t; /t 指向终结符在栈中的位置 if(Is_Vt(st.datast.top,Terminal)!=-1) / 栈顶为终结符m=Is_Vt(st.datast.top,Terminal);/ 获取分析表 Table 的第 一个下标t=st.top;else / 栈顶为非终结符,看 top-1m=Is_Vt(st.datast.top-1,Terminal);/ 获取分析表 Table 的第一个下标t=st.top-1;if(Tablemk= | Tablemk=) / 栈顶符号的优先级小 于等于endl;输入符号,压栈PrintStack(st,st.top);
5、 / 输出栈中内容 coutchsetw(10); /输出当前符号 for(int p=j+1;p=Len;p+) / 输出剩余输入串coutStringp;coutttt 移进 endl; / 输出下一步进行的操作st.top+;st.datast.top=ch; / 输入符移进栈中j+;ch=Stringj; / 指向下一输入符else if(Tablemk=!) / 两终结符的优先关系不确定coutendl* 分析出错 !*endl;return 0;else / 栈顶符号的优先级大于输入符,归约int q; / 表示分析表 Table 的行if(Is_Vt(st.datat-1,Ter
6、minal)!=-1) / 终结符相邻符号也是 终结符q=Is_Vt(st.datat-1,Terminal);/ 获得分析表 Table 的 行t=t-1; / 获得分析表 Table 的列else /t-1 位置是一个非终结符q=Is_Vt(st.datat-2,Terminal);t=t-2;while(Tableqm!=)m=q;if(Is_Vt(st.datat-1,Terminal)!=-1) / 终结符相邻符号 也是终结符q=Is_Vt(st.datat-1,Terminal);/ 获 得 分 析 表 Table 的行 t=t-1; / 获得分析表Table 的列else /t-
7、1 位置是一个非终结符q=Is_Vt(st.datat-2,Terminal);t=t-2;PrintStack(st,st.top); coutchsetw(10); for(intp=j+1;p=Len;p+) coutStringp;coutttt 归约 endl;st.top=t+1;st.datast.top=N;elsecoutendl* 该输入串不是文法的句子 !*endl; return 0;PrintStack(st,st.top);coutchsetw(10);for(int p=j+1;p=Len;p+)coutStringp;coutttt 接受 endl;couten
8、dl*分析成功:该输入串是文法的句子!*endl;return 0;运行结果:嬴H:编译原理调试程唐Debug、优先-eie亥输入串为:色吩祈成功:该输入串是文法的句子TPress an/ key to continuecontinye*1衰输 入串为:a;f翼X?(耳MENX耳耳KiOtE貫羔处算貝覽梵h寸彳旱NWJt XXJfME SOC Jt耳貝K址耳HiCiOtJfXK当前符号剩余输天串移a;att;att;aNCatt时号栈当前符号CaB a+ N+B N *BLB tt tt tk Ntt分析过程 剩余输天串a+att+a)ttaaHUtlKKKiMKKWK耳耳:ME員iMNaOCXiMJC耳耳6鳶移进或归约賢进哆进移进移进b归约NKJC江辽週量沌NKKXNJ(耳耳*该输入串为:a;#十分析成功:该输入串学文法的句子?十Press any key to continue进翁逬常进约翁约约K编译原理调试程序Debug优先exe;*输入字符串 的长度f X XX
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四川省遂宁市大英县江平初中达标名校2025届初三下学期第一学段考生物试题含解析
- 吐鲁番职业技术学院《平面图形语言》2023-2024学年第二学期期末试卷
- 渭南师范学院《增材制造技术基础》2023-2024学年第二学期期末试卷
- 外贸混凝土视频讲解课件
- 工业仪器校准实验室租赁及全面服务合同
- 工业废气净化设备质保期保养与环保效果监测合同
- 生物工程洁净室使用权及设施升级租赁协议
- 远洋货轮船员劳务合作合同
- 影视群众演员福利待遇保密协议补充条款
- 高端制造行业有限责任合伙协议(LLP)
- 数字贸易学 课件 第5章 数字服务贸易
- DB11∕T 848-2023 压型金属板屋面工程施工质量验收标准
- 2024年江苏交通控股有限公司招聘笔试参考题库附带答案详解
- 孕妇乳母的饮食调理
- 银行理财双录培训课件
- 2025年4月自考00160审计学押题及答案解析
- 了解高中生心理健康问题的常见表现和解决方法
- 小学生反诈知识宣传课件
- 住培临床技能教学教案
- 2023肝硬化腹水诊疗指南(完整版)
- 莱钢集团公司绩效考核与薪酬系统优化设计研究的中期报告
评论
0/150
提交评论