收藏 分销(赏)

编译原理词法分析实验一词法分析扫描器的设计实现.doc

上传人:w****g 文档编号:2184507 上传时间:2024-05-22 格式:DOC 页数:16 大小:126KB
下载 相关 举报
编译原理词法分析实验一词法分析扫描器的设计实现.doc_第1页
第1页 / 共16页
编译原理词法分析实验一词法分析扫描器的设计实现.doc_第2页
第2页 / 共16页
编译原理词法分析实验一词法分析扫描器的设计实现.doc_第3页
第3页 / 共16页
编译原理词法分析实验一词法分析扫描器的设计实现.doc_第4页
第4页 / 共16页
编译原理词法分析实验一词法分析扫描器的设计实现.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

1、编译原理程序设计实验报告实验题目班级:计算机1306姓名:学号:289实验目标:词法分析扫描器的设计实现实验内容:1. 概要设计1) 主函数:每次从文件中读取一个字符,不是#,继续判断其是否是09数字,是进入isnumber()函数,否继续判断其是否是az或AZ,是进入isalpha()函数,否继续判断是否是空格或换行符,是继续读下一个字符,否进入isother()函数。2) Isnumber():读字符,将数字(包括小数点)全部接收,并存入常数表。3) Isalpha():读字符,将az或AZ(包括下划线)全部接收,与关键字表比较,匹配,输出序号,否则存入标识符表。4) Isother():

2、读字符,将符号都接受,与界符表比较,匹配输出序号,遇到”或分别存入字符表和字符串表。2. 流程图 开始从文件读一个字符结束 #? T F进入函数Isnumber() 09? T F进入函数isAlpha()az或AZ? T空格或/n? F F进入isOther()3. 关键函数void IsNumber(); /读的是数字void IsAlpha(); /读的是关键字和标示符int IsOther();/读字符、字符串、界符源程序代码:(加入注释)#include#include#include #include using namespace std;/*定义结构体*/typedef str

3、uct Token char name20; int state; /状态,为0是标识符,为1是字符,为2是字符串,为3是数字,为4是关键字,为5是界符 Token;typedef struct STR / char name20; int code;STR;STR iT10;STR cT20;STR sT20;STR CT20;STR KT10=int,4,main,5,void,6,if,7,else,8,char,9;STR PT30=,10,14,15,+,16,-,17,*,18,/,19, ,20,21,22,;,23,(,24,),25, ,26,27;/*全局变量声明*/Tok

4、en CurrentToken; /正在读的tokenToken token200;FILE *fp; /源文件指针char ch; /读取字符int state=0;/0表示标识符,1表示字符,2表示字符串int iT_i=0;/iT结构体数组下标int cT_i=0;int sT_i=0;int CT_i=0;int index=0;/token的下标/*函数声明*/void IsNumber(); /读的是数字void IsAlpha(); /读的是字母,关键字和标示符int IsOther();/,;+-/*主函数*/int main() int i =0; if(fp=fopen(s

5、ource.txt,r)=NULL) coutcan not open the source file!nendl; exit(1); ch=fgetc(fp); /文件中读一个字符 while(ch!=#) for(i=0; i=0)&(ch=a)&(ch=A)&(ch=Z)|(ch=_) /关键字和标识符 IsAlpha(); else if(ch= |ch=n) ch=fgetc(fp); else IsOther(); coutendl; for(i=0;i=index;i+)couttokeni.name ; coutendl; coutfinish=0)&(ch=9) Curren

6、tToken.namek+=ch;/将数字放入单词缓冲区 ch=fgetc(fp); bool flag=1; if(ch=.) CurrentToken.namek+=ch; ch=fgetc(fp); if(ch9) CurrentToken.namek+=ch; flag=0; else while(ch=0)&(ch=9) CurrentToken.namek+=ch;/将数字放入单词缓冲区 ch=fgetc(fp); if(flag=1) strcpy(CTCT_i+.name,CurrentToken.name);strcpy(tokenindex.name,CurrentToke

7、n.name );tokenindex+.state=3; /coutCurrentToken.name endl; cout ; else coutCurrentToken.name =a)&(ch=A)&(ch=Z)|ch=_)/将完整的单词放入单词缓冲区 CurrentToken.namei+=ch; ch=fgetc(fp); flag=0; /判断是否是关键字 for(i=0;i7;i+) if(strcmp(CurrentToken.name,KTi.name)=0) flag=1; /printf(%s n,CurrentToken.name,KTi.code);strcpy(t

8、okenindex.name,CurrentToken.name);tokenindex+.state =4; printf( ,KTi.code); break; if(flag!=1) while(ch=a)&(ch=A)&(ch=0)&(ch=9) CurrentToken.namei+=ch; ch=fgetc(fp); /printf(%s n,CurrentToken.name); printf( );strcpy(tokenindex.name,CurrentToken.name);tokenindex+.state =0;int tag=0;for(int j=0;jiT_i;

9、j+)if(strcmp(CurrentToken.name,iTj.name)=0)tag=1;break;if(tag=0) strcpy(iTiT_i.name,CurrentToken.name); iTiT_i+.code=0; /*其它 */int IsOther() int i; for(i=0; i: CurrentToken.name0=; flag=1; ch=fgetc(fp); if(ch =) CurrentToken.name1=; ch=fgetc(fp); break; else break; case: CurrentToken.name0=a&ch=A&ch

10、=Z) CurrentToken.name1=ch; ch=fgetc(fp); if(ch=) CurrentToken.name2=; cout ; strcpy(tokenindex.name,CurrentToken.name); tokenindex+.state =1; int tag=0; for(int j=0;j=cT_i;j+) if(strcmp(cTcT_i.name ,CurrentToken.name )=0) tag=1; if(tag=0) strcpy(cTcT_i+.name,CurrentToken.name); ch=fgetc(fp); return

11、0; else couterror1; exit(1); else cout=a&ch=A&ch=Z) CurrentToken.namej+=ch; ch=fgetc(fp); if(ch=) CurrentToken.namej+=; cout ; strcpy(tokenindex.name,CurrentToken.name); tokenindex+.state =1; int tag=0; for(int j=0;j=sT_i;j+) if(strcmp(sTsT_i.name ,CurrentToken.name )=0) tag=1; if(tag=0) strcpy(sTsT

12、_i+.name,CurrentToken.name); ch=fgetc(fp); return 0; else couterror3; exit(1); if(CurrentToken.name0!=0) for(i=0;i20;i+) if(strcmp(CurrentToken.name,PTi.name)=0) /printf(%s n,CurrentToken.name,PTi.code); printf( ,PTi.code);strcpy(tokenindex.name ,CurrentToken.name );tokenindex+.state =PTi.code; brea

13、k; if(flag!=1) ch=fgetc(fp); /while(ch= |ch=n) ch=fgetc(fp); return 0;程序运行结果:(截屏)输入:Source.txt文本int main (void) int a=1, d=2,c; if(a=d) c=a; a=d; d=c; char ch10=ok;char x,y=a;c=a+d; #输出:目 录第一章 总论1一、项目概况1二、项目提出的理由与过程6三、项目建设的必要性8四、项目的可行性12第二章 市场预测15一、市场分析15二、市场预测16三、产品市场竞争力分析19第三章 建设规模与产品方案22一、建设规模22二

14、、产品方案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一、投资估算56二、资金筹措58第十三章 财务评价与效益分析61一、项目财务评价61二、财务评价结论65三、社会效益68四、生态效益68第十四章 风险分析70一、主要风险分析识别70二、风险程度分析及防范风险的措施70第十五章 招标方案72一、招标范围72二、招标组织形式72三、招标方式72第十六章 结论与建议74一、可行性研究结论74二、建议75附 件77一、附表77二、附件77三、附图77

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 考试专区 > 中考

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服