版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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<stdio.h>#include<malloc.h>struct 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);/文本有多少个字母、数字、符号
4、buf_string = (char*)malloc(sizeof(char)*10);/存储当前标识符、关键字x = (MySplit*)malloc(sizeof(MySplit)*50);for(int i = 0;i<50;i+)buf_texti = '0'for(int g = 0;g<10;g+)buf_stringg = '0'char c;int j = 0;int k = 0;int l = 0;int m = 0;FILE *fp = fopen("test.txt","r");/当前文件
5、夹内名为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是否
6、是最后一个字符的标示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;g<10;g+)buf_stringg = '0'm = 0;else if(xl.flag = 0)/该字符的下一个是空格if(xl-1.flag = 0)/该字符本身是空格elsebuf_stringm = xl.c;printf("%sn
7、",buf_string);for(int g = 0;g<10;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;g<10;g+)buf_stringg = '0'm = 0;else if(xl.fl
8、ag = -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;g<10;g+)buf_stringg = '0'elsewhile(xl+1.c != 10)/未到回车l+;else/该字符的下一个是某字符串中间的一个字符或最后一个字符if(xl-1.flag = 0)/该字符是空格elsebuf_str
9、ingm = 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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年黑龙江省尚志市高三数学下册期末考试模拟试卷及参考答案(完整版)
- 2026年黑龙江省抚远市高三数学下册期末考试模拟考试卷及完整答案一套
- 2026年黑龙江省海伦市高三数学下册期末考试模拟测试卷含答案
- 2026年黑龙江省海林市高三数学下册期末考试模拟检测卷及答案【真题汇编】
- 2026年黑龙江省穆棱市高三数学下册期末考试模拟测试卷含答案(夺分金卷)
- 2026 年人教版八年级数学下册第四单元测试卷
- 2026年黑龙江省虎林市高三数学下册期末考试模拟试卷附参考答案(黄金题型)
- 2026年黑龙江省铁力市高三数学下册期末考试模拟测试卷(研优卷)附答案
- 网络安全教育主题班会课件完整版
- 厦门思明区2026-2027学年五年级上册语文单元测试卷第一单元
- 满70岁以上换领驾照三力测试题及答案
- 鹿茸片销售合同
- 超声内镜诊疗中国指南(2026 版)
- 重温七一重要讲话精神
- 智联猎头:2026年企业薪酬调研报告
- 宫颈癌护理新进展与趋势
- 场景美术创作技法
- 冷却塔填料更换施工方法方案
- GB/T 20042.4-2025质子交换膜燃料电池第4部分:电催化剂测试方法
- 2025年军事理论与国防教育考试题及答案
- 化解矛盾拥抱友谊主题班会
评论
0/150
提交评论