版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编译原理程序设计实验报告——实验题目班级:计算机1306 姓名: 学号:289实验目标:词法分析扫描器的设计实现实验内容:概要设计主函数:每次从文件中读取一个字符,不是#,继续判断其是否是0~9数字,是进入isnumber()函数,否继续判断其是否是a~z或A~Z,是进入isalpha()函数,否继续判断是否是空格或换行符,是继续读下一个字符,否进入isother()函数。Isnumber():读字符,将数字(包括小数点)全部接收,并存入常数表。Isalpha():读字符,将a~z或A~Z(包括下划线)全部接收,与关键字表比较,匹配,输出序号,否则存入标识符表。Isother():读字符,将符号都接受,与界符表比较,匹配输出序号,遇到”或’分别存入字符表和字符串表。流程图开始开始从文件读一个字符从文件读一个字符结束#?T结束#?F进入函数Isnumber()0~9?T进入函数Isnumber()0~9?F进入函数isAlpha()a~z或A~Z?T进入函数isAlpha()a~z或A~Z?空格或/n?F空格或/n?F进入isOther()进入isOther()关键函数voidIsNumber();//读的是数字voidIsAlpha();//读的是关键字和标示符intIsOther();//读字符、字符串、界符源程序代码:(加入注释)#include<stdio.h>#include<iostream>#include<string.h>#include<stdlib.h>usingnamespacestd;/***********定义结构体***********/typedefstructToken{charname[20];intstate;//状态,为0是标识符,为1是字符,为2是字符串,为3是数字,为4是关键字,为5是界符}Token;typedefstructSTR//{charname[20];intcode;}STR;STRiT[10];STRcT[20];STRsT[20];STRCT[20];STRKT[10]={{"int",4},{"main",5},{"void",6},{"if",7},{"else",8},{"char",9}};STRPT[30]={{">=",10},{"<=",11},{"==",12},{"=",13},{">",14},{"<",15},{"+",16},{"-",17},{"*",18},{"/",19},{"{",20},{"}",21},{",",22},{";",23},{"(",24},{")",25},{"[",26},{"]",27}};/***********全局变量声明*********/TokenCurrentToken;//正在读的tokenTokentoken[200];FILE*fp;//源文件指针charch;//读取字符intstate=0;//0表示标识符,1表示字符,2表示字符串intiT_i=0;//iT结构体数组下标intcT_i=0;intsT_i=0;intCT_i=0;intindex=0;//token的下标/***函数声明***/voidIsNumber();//读的是数字voidIsAlpha();//读的是字母,关键字和标示符intIsOther();//,;+-/******************主函数**********************/intmain(){inti=0;if((fp=fopen("source.txt","r"))==NULL){cout<<"cannotopenthesourcefile!\n"<<endl;exit(1);}ch=fgetc(fp);//文件中读一个字符while(ch!='#'){for(i=0;i<20;i++)CurrentT[i]='\0';//将单词缓冲区初始化if((ch>='0')&&(ch<='9'))//数字IsNumber();elseif(((ch>='a')&&(ch<='z'))||((ch>='A')&&(ch<='Z'))||(ch=='_'))//关键字和标识符{IsAlpha();}elseif(ch==''||ch=='\n'){ch=fgetc(fp);}elseIsOther();} cout<<endl; for(i=0;i<=index;i++) { cout<<token[i].name<<""; }cout<<endl;cout<<"finish"<<endl; return0;}/************数字处理****************/voidIsNumber(){intk=0;while(((ch>='0')&&(ch<='9'))){CurrentT[k++]=ch;//将数字放入单词缓冲区ch=fgetc(fp);}boolflag=1;if(ch=='.'){CurrentT[k++]=ch;ch=fgetc(fp);if(((ch<'0')||(ch>'9'))){CurrentT[k++]=ch;flag=0;}else{while(((ch>='0')&&(ch<='9'))){CurrentT[k++]=ch;//将数字放入单词缓冲区ch=fgetc(fp);}}}if(flag==1){strcpy(CT[CT_i++].name,CurrentT); strcpy(token[index].name,CurrentT); token[index++].state=3;//cout<<CurrentT<<"<03>"<<endl;cout<<"<03>";}elsecout<<CurrentT<<"<error>"<<endl;}/************是否为关键字****************/voidIsAlpha(){inti=0;if(state==0){boolflag=0;while(((ch>='a')&&(ch<='z'))||((ch>='A')&&(ch<='Z'))||ch=='_')//将完整的单词放入单词缓冲区{CurrentT[i++]=ch;ch=fgetc(fp);}flag=0;//判断是否是关键字for(i=0;i<7;i++){if(strcmp(CurrentT,KT[i].name)==0){flag=1;//printf("%s<%02d>\n",CurrentT,KT[i].code); strcpy(token[index].name,CurrentT); token[index++].state=4;printf("<%02d>",KT[i].code);break;}}if(flag!=1){while(((ch>='a')&&(ch<='z'))||((ch>='A')&&(ch<='Z'))||ch=='_'||((ch>='0')&&(ch<='9'))){CurrentT[i++]=ch;ch=fgetc(fp);}//printf("%s<00>\n",CurrentT);printf("<00>"); strcpy(token[index].name,CurrentT); token[index++].state=0; inttag=0; for(intj=0;j<iT_i;j++) { if(strcmp(CurrentT,iT[j].name)==0) { tag=1; break; } } if(tag==0){ strcpy(iT[iT_i].name,CurrentT);iT[iT_i++].code=0; }}}}/***************其它************/intIsOther(){inti;for(i=0;i<20;i++){CurrentT[i]='\0';//将缓冲区初始化}boolflag=0;switch(ch){case'>':{CurrentT[0]='>';flag=1;ch=fgetc(fp);if(ch=='='){CurrentT[1]='=';ch=fgetc(fp);break;}else{break;}}case'<':{CurrentT[0]='<';flag=1;ch=fgetc(fp);if(ch=='='){CurrentT[1]='=';ch=fgetc(fp);break;}else{break;}}case'=':{CurrentT[0]='=';flag=1;ch=fgetc(fp);if(ch=='='){CurrentT[1]='=';ch=fgetc(fp);break;}else{break;}}case'+':{CurrentT[0]='+';break;}case'-':{CurrentT[0]='-';break;}case'*':{CurrentT[0]='*';break;}case'/':{CurrentT[0]='/';break;}case'{':{CurrentT[0]='{';break;}case'}':{CurrentT[0]='}';break;}case',':{CurrentT[0]=',';break;}case';':{CurrentT[0]=';';break;}case'(':{CurrentT[0]='(';break;}case')':{CurrentT[0]=')';break;}case'[':{CurrentT[0]='[';break;}case']':{CurrentT[0]=']';break;}case'\'':{CurrentT[0]='\'';ch=fgetc(fp);if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')){CurrentT[1]=ch;ch=fgetc(fp);if(ch=='\''){CurrentT[2]='\'';cout<<"<01>"; strcpy(token[index].name,CurrentT); token[index++].state=1; inttag=0; for(intj=0;j<=cT_i;j++) { if(strcmp(cT[cT_i].name,CurrentT)==0) tag=1; } if(tag==0) { strcpy(cT[cT_i++].name,CurrentT); }ch=fgetc(fp);return0;}else{cout<<"error1";exit(1);}}else{cout<<"error2";exit(1);}}case'\"':{intj=1;CurrentT[0]='\"';ch=fgetc(fp);while((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')){CurrentT[j++]=ch;ch=fgetc(fp);}if(ch=='\"'){CurrentT[j++]='\"';cout<<"<02>"; strcpy(token[index].name,CurrentT); token[index++].state=1; inttag=0; for(intj=0;j<=sT_i;j++) { if(strcmp(sT[sT_i].name,CurrentT)==0) tag=1; } if(tag==0) { strcpy(sT[sT_i++].name,CurrentT); }ch=fgetc(fp);return0;}else{cout<<"error3";exit(1);}}}if(CurrentT[0]!='\0'){for(i=0;i<20;i++)if(strcmp(CurrentT,PT[i].name)==0){//printf("%s<%d>\n",CurrentT,PT[i].code);printf("<%d>",PT[i].code); strcpy(token[index].name,CurrentT); token[index++].state=PT[i].code;break;}}if(flag!=1)ch=fgetc(fp);//while(ch==''||ch=='\n')ch=fgetc(fp);return0;}程序运行结果:(截屏)输入:Source.txt文本intmain(void){inta=1,d=2,c;if(a<=d){c=a;a=d;d=c;}charch[10]="ok";charx,y='a';c=a+d;}}#输出:目录TOC\o"1-2"\h\z\u第一章总论 1一、项目概况 1二、项目提出的理由与过程 6三、项目建设的必要性 8四、项目的可行性 12第二章市场预测 15一、市场分析 15二、市场预测 16三、产品市场竞争力分析 19第三章建设规模与产品方案 22一、建设规模 22二、产品方案 22三、质量标准 22第四章项目建设地点 25一、项目建设地点选择 25二、项目建设地条件 25第五章技术方案、设备方案和工程方案 28一、技术方案 28二、产品特点 30三、主要设备方案 32四、工程方案 32第六章原材料与原料供应 35一、原料来源及运输方式 35二、燃料供应与运输方式 35第七章总图布置、运输、总体布局与公用辅助工程 37一、总图布置 37二、运输 38三、总体布局 38四、公用辅助工程 39第八章节能、节水与安全措施 44一、主要依据及标准 44二、节能 44三、节水 45四、消防与安全 45第九章环境影响与评价 47一、法规依据 47二、项目建设对环境影响 48三、环境保护措施 48四、环境影响评价 49第十章项目组织管理与运行 50一、项目建设期管理 50二、项目运行期组织管理 52第十一章项目实施进度 55第十二章投资估算和资金筹措 56一、投资估算 56HYPERLINK\l"
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 华师大版初中科学7.2 人体生命活动的神经调节方式(24课件)
- 位移、速度、加速度、时间之间的关系
- 人教部编版四年级语文上册习作《记一次游戏》精美课件
- 【同步提优】部编版三语下第七单元各类阅读真题(含小古文、非连续性文本等)名师解析连载
- 福建省福州文博中学2024届下学期第二次月考高三数学试题试卷
- 算法设计与分析 课件 6.7-贪心法应用-多机调度问题
- 2024年宿州申请客运从业资格证版试题
- 2024年重庆客运从业资格证500题下载
- 2024年大同考客运从业资格证考试题目
- 2024年郴州道路客运输从业资格证培训考试资料
- 小学四年级数学三位数除以两位数过关考核口算题带答案
- (新版)糖尿病知识竞赛考试题库300题(含答案)
- 《创意改善生活》课件 2024-2025学年湘美版(2024)初中美术七年级上册
- 2024-2025学年 浙教版七年级数学上册期中(第1-4章)培优试卷
- CHT 1027-2012 数字正射影像图质量检验技术规程(正式版)
- 国际经济与贸易专业生涯人物访谈报告
- 《扣件式钢管脚手架安全技术规范》JGJ130-2023
- 教学成果奖培育思考
- 河北省廊坊市药品零售药店企业药房名单目录
- 《桂花雨》第二课时教学设计及反思
- 食品研发工作流程
评论
0/150
提交评论