




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
湖南农业大学信息科学技术学院学 生 实 验 报 告姓名: 年级专业班级 日期 年 月 日 成绩 课程名称编译原理实验实验名称源程序的输入和扫描 实验类型设计性【实验目的、要求】理解源程序被编译器读取的过程,掌握扫描程序的编写方法。【实验内容】编制一个源程序的输入过程,从键盘、文件或文本框输入若干行语句,依次存入输入缓冲区(字符型数据);并编制一个扫描子程序,该子程序中每次调用能依次从存放源程序的输入缓冲区中读出一个有效字符。【实验环境】计算机 CodeBlocks【实验步骤、过程】1 功能描述 扫描一段源程序,经字符分析后分离出关键字、标识符、运算符、常数和分隔符,并分行显示。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 下一个是字符? 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(sizeof(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)/一个字符一个字符的读入putchar(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(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(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.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年肺活量测试仪行业研究报告及未来行业发展趋势预测
- 2025年电子蜂鸣器行业研究报告及未来行业发展趋势预测
- 2025年2,3-二氯马来酸酐行业研究报告及未来行业发展趋势预测
- 2025年钢粉行业研究报告及未来行业发展趋势预测
- 2025年超级不锈钢行业研究报告及未来行业发展趋势预测
- 烟机设备操作工操作考核试卷及答案
- 异丙醇装置操作工专业知识考核试卷及答案
- FZ/T 73001-2016袜子
- 国际脓毒症与脓毒症休克指南
- 环境管理标准化手册
- 银屑病教学讲解课件
- 新部编版道德与法治四年级上册第一单元课件全套与班级共成长
- 前厅服务员国家职业标准69080
- 项目领导班子竞聘面试评分表
- 大分子自组装课件
- 开业筹备倒计时行动计划表
- 工序质量报验单
- 湖南地方文化常识 完整版PPT
评论
0/150
提交评论