版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、湖南农业大学信息科学技术学院学 生 实 验 报 告姓名: 年级专业班级 日期 年 月 日 成绩 课程名称编译原理实验实验名称源程序的输入和扫描 实验类型设计性【实验目的、要求】理解源程序被编译器读取的过程,掌握扫描程序的编写方法。【实验内容】编制一个源程序的输入过程,从键盘、文件或文本框输入若干行语句,依次存入输入缓冲区(字符型数据);并编制一个扫描子程序,该子程序中每次调用能依次从存放源程序的输入缓冲区中读出一个有效字符。【实验环境】计算机 CodeBlocks【实验步骤、过程】1 功能描述 扫描一段源程序,经字符分析后分离出关键字、标识符、运算符、常数和分隔符,并分行显示。2 程序结构描述
2、从文本中读入源程序。利用flag标志记录当前字符的下一个字符的属性(如为空格flag就为0,为分隔符就为-1等)。并用结构体MySplit存储当前字符和其下一位标志flag。用while循环依次读入每个字符并判断。字符串暂存在buf_string中。以判断字符是否结束分为以空格结束,以分隔符结束,以注释结束,以运算符和其他字符合并结束,以及以字符结束。做不同处理。最后再分行显示。3 流程图(或原理图)源程序Buff-textMySplit结构体数组While循环下一个是分隔符? Flag=-1 Y N Flag=0下一个是空格? Flag=-2 Y下一个是注释? N Y Flag=1 下一个是
3、字符? N Y结束4 关键代码源程序:/源程序输入和扫描#include#includestruct MySplitchar c;char c_next;int flag;int Mygetchar(MySplit);int main(int argc,char *argv)char* buf_text;/用来暂存键盘输入的文本char* buf_string;/用来暂存一个字符串的(如一个关键字)MySplit *x;buf_text = (char*)malloc(sizeof(char)*50);/文本有多少个字母、数字、符号buf_string = (char*)malloc(size
4、of(char)*10);/存储当前标识符、关键字x = (MySplit*)malloc(sizeof(MySplit)*50);for(int i = 0;i50;i+)buf_texti = 0;for(int g = 0;g10;g+)buf_stringg = 0;char c;int j = 0;int k = 0;int l = 0;int m = 0;FILE *fp = fopen(test.txt,r);/当前文件夹内名为test的txt文件printf(*n);printf(源文件:n);c = fgetc(fp);while( c!= EOF)/一个字符一个字符的读入p
5、utchar(c);buf_textj = c;j+;c = fgetc(fp);fclose(fp);printf(*n);printf(经扫描后的源文件如下:n);while(k j)xk.c = buf_textk;xk.c_next = buf_textk+1;xk.flag = Mygetchar(xk);/将当前x是否是最后一个字符的标示flag进行存储k+;while(l j)if(xl.flag = -1)/该字符的下一个是分隔符if(xl-1.flag = 0)/该字符本身是空格elsebuf_stringm = xl.c;printf(%sn,buf_string);for
6、(int g = 0;g10;g+)buf_stringg = 0;m = 0;else if(xl.flag = 0)/该字符的下一个是空格if(xl-1.flag = 0)/该字符本身是空格elsebuf_stringm = xl.c;printf(%sn,buf_string);for(int g = 0;g10;g+)buf_stringg = 0;m = 0;l+;/越过空格else if(xl-1.flag = -1 & xl.flag = 1)/该字符是符号且后紧跟字母或数字(如=b或,b)buf_stringm = xl.c;printf(%sn,buf_string);for
7、(int g = 0;g10;g+)buf_stringg = 0;m = 0;else if(xl.flag = -2)/该字符的下一个是注释起始if(xl-1.flag = 0)/该字符本身是空格elseif(xl-1.flag = 1 | xl-1.flag = -1)/如果注释是紧贴着该行代码的buf_stringm = xl.c;printf(%sn,buf_string);for(int g = 0;g10;g+)buf_stringg = 0;elsewhile(xl+1.c != 10)/未到回车l+;else/该字符的下一个是某字符串中间的一个字符或最后一个字符if(xl-1
8、.flag = 0)/该字符是空格elsebuf_stringm = xl.c;m+;l+;printf(*n);int Mygetchar(MySplit x)switch(x.c_next)case : return 0;break;/空格case 10:return 0;break;/回车case /:return -2;break;/注释case : return -1;break;case : return -1;break;case (: return -1;break;case ): return -1;break;case ,: return -1;break;case ;: return -1;break;case =: return -1;break;case +: return -1;break;default : return 1;break; 【实验结果和总结】(对实验结果进行相应分析,或总结实验的心得体会,并提出实验的改进意见)1 实验结果记录 (截图) 2 实验总结 遇到的问题 所用的时间 所用方法和手段以及心得体会1. 通
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 唐山幼儿师范高等专科学校《钢筋混凝土结构平面识读与钢筋算量》2025-2026学年期末试卷
- 肝脏移植后护理流程培训
- 严重精神障碍项目质控经验分享
- 肺炎科普宣传护理
- 2026年成人高考药学专业(专升本)真题单套试卷
- 2026年成人高考高起专英语(理)真题单套试卷
- 2026年财务管理专升本会计学原理真题单套试卷
- 政治中考试卷及答案
- 2026年1月证券从业资格考试证券市场基础知识真题单套试卷
- 2025-2026学年人教版七年级语文上册《古诗两首》单元测试卷(含答案)
- 单作用式气动衬氟球阀使用说明书
- 2026春统编版语文 语文五年级下册综合性学习遨游汉字王国 汉字真有趣 教学课件
- 老年人摄影与艺术创作指导
- 2024-2025学年度洛阳职业技术学院单招《职业适应性测试》综合提升测试卷含答案详解【新】
- 2025年文化旅游演艺产业集群人才培养可行性研究
- 2026年振动传递路径的分析方法
- 工程项目竣工资料归档与移交规范
- 工厂防错培训课件
- 高中数学资优生导师培养模式与教学资源整合研究教学研究课题报告
- 商业综合体弱电系统施工方案
- 2025年选拔乡镇副科级干部面试真题附答案
评论
0/150
提交评论