版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、南华大学计算机科学与技术学院实 验 报 告 ( 2008 2009 学年度 第 一 学期 )课程名称编译原理实验名称语法分析器姓名张博学号专业计算机专业班级计算机062班地点八栋209教师陈星1. 实验目的及要求软件、硬件环境Microsoft Visual c+ 6.0.实验目的:编制一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析。实验要求:利用C语言编制递归下降分析程序,并对简单语言进行语法分析。(1) 待分析的简单语言的语法:用扩充的BNF表示如下::=beginend:=;:=:=ID:= :=+|-:=*|/:=ID|NUM|()(2)实验要求说明: 输
2、入单词串,以”#”结束,如果是正确的文法句子,则输出成功信息,打印“success”,否则输出“error”。2. 实验算法思想(包含主程序的示意图)(1)主程序的示意图如下图所示:(2)递归下降分析程序示意图如下图所示:(3)语法串分析过程示意图如下图所示: (4)statement语句分析函数示意图如下图所示: (5)expression表达式分析函数如下图所示:(6)term分析函数示意图如下图所示: (7)factor分析过程示意图如下图所示:3. 实验内容#include#include#include#define MAX 150 /词法分析表的最大容量#define MAXBUF
3、 255/缓冲区的最大缓冲量void term();void lrparser();void statement();void yucu();void expression();void factor();char progMAXBUF,tokenMAX;char ch;int syn,p,m,n,sum,kk;char *rwtab6=begin,if,then,while,do,end;/词法分析程序/void scaner()for(m=0;m=65&ch=65&ch=48&ch=57)/*为字母字符或数字字符*/ tokenm+=ch; ch=progp+;/读取下一个字符; toke
4、nm+=0; p=p-1; syn=10; for(n=0;n=48&ch=48&ch=57/*ch为数字字符*/)sum=sum*10+ch-0; ch=progp+;/读取下一个字符;p=p-1;/回退一个字符;syn=11;else switch(ch) case ) syn=21; tokenm+=ch; else if(ch=) syn=22; tokenm+=ch; else syn=20; p=p-1;/回退一个字符; break; case: tokenm+=ch; ch=progp+;/读取下一个字符; if(ch=) syn=24;/将=的中别码=syn; tokenm+=
5、ch; else syn=23; p=p-1;/回退一个字符; break; case: tokenm+=ch; ch=progp+;/读取下一个字符; if(ch=) syn=18; tokenm+=ch; else syn=17; p=p-1;/回退一个字符; break; case+: syn=13;token0=ch; break; case-: syn=14;token0=ch; break; case*: syn=15;token0=ch; break; case/: syn=16;token0=ch; break; case=: syn=25;token0=ch; break;
6、case;: syn=26;token0=ch; break; case(: syn=27;token0=ch; break; case): syn=28;token0=ch; break; case#: syn=0;token0=ch; break; default: syn=-1; break;/void statement()if(syn=10) scaner();/读下一个单词符号; if(syn=18) scaner();/读下一个单词符号; expression();/调用expression函数; else cout赋值符号错误!endl; kk=1; else cout语句错误
7、!endl; kk=1; return; /void yucu() statement();/调用 statement(); while(syn=26) scaner();/读下一个单词符号; statement();/调用statement()函数; return; /void expression() term();/调用term函数; while(syn=13|syn=14) scaner();/读下一个单词符号; term();/调用term函数 return;/void term() factor();/调用factor 函数; while(syn=15|syn=16) scaner
8、();/读下一个单词符号; factor();/调用factor函数; return;/void factor() if(syn=10|syn=11) scaner();/读下一个单词符号; else if(syn=27) scaner();/读下一个单词符号; expression();/调用expression()函数; if(syn=28) scaner();/读下一个单词符号; else cout输出)错误endl; kk=1; else cout输出表达示错误endl; kk=1; return;/void lrparser()scaner();/读下一个单词符号; if(syn=1
9、) scaner();/读下一个单词符号; yucu();/调用yucu函数; if(syn=6) scaner();/读下一个单词符号; if(syn=0&(kk=0) coutSuccessendl; else if(kk!=1) cout缺end错误!endl; kk=1; else coutbegin错误!endl; kk=1;return;/主函数/void main()char A;cout*endl;cout 欢迎使用语法分析程序 endl;loop: p=0;cout*endl; printf(please input string (以#结束):n);doscanf(%c,&
10、ch);progp+=ch;/输入源程序字符串,送到缓冲区progp+中;while(ch!=#);p=0;lrparser();cout*endl;cout请确定是否继续输入:Y为继续;其它为退出;endl;coutA;switch(A) case Y: goto loop; default: cout*endl; coutThank you ! Bye Bye !endl; cout*endl; break; 4.实验结果例如:对源程序begin x:=9; x:=2*3;b:=a+x end #经语法分析后输出success.输入:x:=a+b*c end #输出:error(给出错误的原因).5. 实验总结分析这次实验是进行初步的语法分析,是基于上次词法分析器的基础上建立起来的分析程序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 综合岗面试考点梳理题库 含答案含解析
- 2026 综合岗事业编面试高频题 题库 含答案
- 事业编计算机岗面试考点梳理2026含答案
- 2026年车间机械挤压伤害应急救护办法
- 健康宣教商业价值
- 2026下半年高中地理教资面试气候类型题库
- 2026年国家电投集团宁夏能源铝业公司人员招聘考试题库及答案详解
- 2026年贵州省烟草专卖局人员招聘笔试参考试题及答案详解
- 2026年重庆对外经贸集团有限公司人员招聘笔试参考试题及答案详解
- 2026下半年杭州市丁桥医院公开招聘编外工作人员1人笔试参考题库及答案解析
- 精神病人警情处置规范与实战
- 早读知识点(课件)-2025-2026学年二年级上册数学人教版
- 办公楼公区装修木工报价清单
- 监察法课件教学课件
- 惊恐障碍的认知行为干预与药物协同
- 声东击西课件
- 2025年服务机器人应用技术员职业技能竞赛题库(含答案)
- JCT 2966-2025混凝土用生活垃圾焚烧飞灰-知识培训
- 《拒绝不文明语言》主题班会课件
- 五年级数学小数乘法教学案例分享
- cnas内审员考试试题及答案
评论
0/150
提交评论