




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、编译原理程序设计实验报告表达式语法分析器的设计与实现班级:XX:学号:实验目标:用两种不同的方法设计一个表达式的语法分析器实验内容:LL(1)分析法LL(1)文法是一种自上而下的语法分析方法,它是从文法的识别符号出发,生成句子的最左推导,从左到右扫描源程序,每次向前查看1个字符,便能确定当前应该选择的产生式。LL(1)分析需要用到一个分析表M和一个符号栈,分析表是一个矩表明当符号栈S的栈顶元素非终结符遇到当前输入字符时,所应选择的产生式;M的元素还可以是存放一个出错标志,说明符号栈S的栈顶元素非终结符不应该遇到当前输入字符(终结符)。重复调用LL(1)分析方法对每一个输入字符进行分析,直到输入
2、栈为空为止。递归下降子程序递归下降分析法,在判断一个表达式时首先进入E然后调用T在调用断是否为“(”或字符或常数,如果不是报错,是“(”的话再进入,是字符或常数的话跳出递归。然后进入T中下一步,判断是否为“*”,是的话进入T子递归,不是的话跳出,进入E的下一步判断是否为“+”,是的话进入E的子递归,不是的话跳出回到主程序。当ch标识符为#时结束。源程序代码:(加入注释)LL(1)分析算法:#include#includeusingnamespacestd;#defineSTACKSIZE50#defineSTACKINCREMENT10#defineOK1#defineerror0#defin
3、eoverflow-1typedefcharSElemType;typedefintStatus;typedefstructSElemType*base;SElemType*top;Intstacksize;SqStack;StatusInitStack(SqStack&S)S.base=(SElemType*)malloc(STACKSIZE*sizeof(SElemType);if(!S.base)exit(overflow);S.top=S.base;S.stacksize=STACKSIZE;returnOK;StatusPush(SqStack&S,SElemTypee)if(S.t
4、op-S.base=S.stacksize)S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType);if(!S.base)exit(overflow);S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;(S.top)+;*(S.top)=e;returnOK;StatusPop(SqStack&S,SElemType&e)if(S.top=S.base)returnerror;e=*(S.top);S.top-;returnOK;St
5、atusGrammerAnalysis(SqStack&S,char*ch,charc)SElemTypee;Push(S,#);Push(S,E);while(!(*(S.top)=#)&(c=#)Pop(S,e);if(e=E)&(c=0)&(c=a&c=0)&(c=a&c=0&c=a&c=0)&(c=a&c=z)ch+;elseif(e=F)&(c=()Push(S,);Push(S,E);ch+;c=*ch;elseif(e=)&(c=)ch+;c=*ch;elsereturnerror;returnOK;intmain()charstr50;charc;system(color0B)
6、;SqStackS;InitStack(S);printf(|-|n);printf(|请输入表达式,以键结束:|n);printf(|-|n);scanf(%s,str);c=*str;if(GrammerAnalysis(S,str,c)printf(语法分析通过n);printf(表达式正确n);elseprintf(语法分析未通过n);printf(表达式错误n);main();return0;递归下降#includeusingnamespacestd;inta=1;charch;inti=0;charstr80;voidT(void);voidF(void);voidE(void);
7、voidError(void);voidError()/出错函数cout语法错误=0&ch=a&ch=z)i+;ch=stri;elseError();a=0;voidE(void)/子程序ET();if(ch=+)i+;ch=stri;E();/递归子程序Eintmain()主函数system(color0B);cout|-|endl;cout|输入表达式以#号结束|endl;cout|-|str;ch=str0;while(ch!=#)E();if(!a)break;if(ch=#)&(a!=0)遇#且a不等于零时语法正确cout语法正确endl;return0;程序运行结果:(截屏)LL(1)分析法:递归下降:思考问题回答:语法分析的任务是什么?语法分析的任务是在词法分析的基础上将单词序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 供货协议合同范例酒水
- 厂区监控维保合同范例
- 确保资金使用效率的管理措施计划
- 公共场所安保人员培训计划
- 幼儿园多元智能发展计划
- 心理契约与员工忠诚度计划
- 新媒体对传统阅读习惯的影响计划
- 改进供水调度系统计划
- 《清镇市站街镇龙滩前明铝铁矿山有限公司清镇市站街镇龙滩前明铝铁矿(延续)矿产资源绿色开发利用方案(三合一)》评审意见
- 四川省钒钛产业投资发展有限公司四川省盐边县红格南钒钛磁铁矿二合一方案情况
- 2025年上海市安全员《C证》考试题库及答案
- 2025年湖南汽车工程职业学院单招职业技能测试题库完整版
- 全国河大版(三起)小学信息技术第三册第1单元第1课《珍藏童年的回忆-文字输入和格式设置》教学设计
- 2025年新苏教版数学一年级下册课件 期末复习 第4课时 数据分类
- 《新能源汽车技术》课件-第二章 动力电池
- 拘留所被拘留人员管理教育
- 儿童饮食健康指南
- 2025青海省公路局事业单位招聘高频重点提升(共500题)附带答案详解
- 《公路施工机械化》课件
- 简析建筑工程中绿色建筑材料的应用
- 2024年度全国社会工作者《社会工作实务》考试题含答案
评论
0/150
提交评论