下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验一 词法分析一、实验目的:编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。二、实验内容:如源程序为C语言。输入如下一段:main()int a=-5,b=4,j;if(a>=b) j=a-b; else j=b-a;要求输出如图:(2,”main”) (5,”(”) (5,”)”)(5,”) (1,”int”) (2,”a”)(4,”=”) (3,”-5”) (5,”,”)(2,”b”) (4,”=”) (3,”4”)(5,”,”) (2,”j”) (5,”;”)(1,
2、”if”) (5,”(”) (2,”a”)(4,”>=”) (2,”b”) (5,”)”)(2,”j”) (4,”=”) (2,”a”)(4,”-”) (2,”b”) (5,”;”)(1,”else”) (2,”j”) (4,”=”)(2,”b”) (4,”-”) (2,”a”)(5,”;”) (5,”)在示例程序的基础上,增加对自加、自减、正负号的判断。三、源程序:#include<iostream>using namespace std;FILE *fp;char cbuffer;char *key8="if","else",&qu
3、ot;for","while","do","return","break","continue"int atype,id=4;int search(char searchchar ,int wordtype) /*判断单词是保留字还是标识符*/ int i=0; int p; switch (wordtype) case 1:for (i=0;i<=7;i+) if (strcmp(keyi,searchchar)=0) p=i+1; break; /*是保留字则p为非0且不重复
4、的整数*/ else p=0; /*不是保留字则用于返回的p=0*/return(p); char alphaprocess(char buffer) int atype; /*保留字数组中的位置*/ int i=-1; char alphatp20; while (isalpha(buffer)|(isdigit(buffer)|buffer='_') alphatp+i=buffer;buffer=fgetc(fp); /*读一个完整的单词放入alphatp数组中*/ alphatpi+1='0' atype=search(alphatp,1);/*对此单词
5、调用search函数判断类型*/ if(atype!=0) printf("%s, (1,%d)n",alphatp,atype-1); id=1; else printf("(%s ,2)n",alphatp); id=2; return buffer;char digitprocess(char buffer)int i=-1;char digittp20;while (isdigit(buffer) digittp+i=buffer; buffer=fgetc(fp); digittpi+1='0'printf("(%s
6、,3)n",digittp);id=3;return(buffer); char otherprocess(char buffer) char ch20; ch0=buffer; ch1='0' if(ch0=','|ch0=''|ch0=''|ch0=''|ch0='('|ch0=')') printf("(%s ,5)n",ch); buffer=fgetc(fp); id=4; return(buffer); if(ch0='*'|
7、ch0='/') printf("(%s ,4)n",ch); buffer=fgetc(fp); id=4; return(buffer); if(ch0='='|ch0='!'|ch0='<'|ch0='>') buffer=fgetc(fp); if(buffer='=') ch1=buffer; ch2='0' printf("(%s ,4)n",ch); else printf("(%s ,4)n",c
8、h); id=4; return(buffer); buffer=fgetc(fp); id=4; return(buffer); if(ch0='+'|ch0='-') if(id=4) /*在当前符号以前是运算符,则此时为正负号*/ int i=1;buffer=fgetc(fp); ch1=buffer; ch2='0' if(ch0 = ch1) printf("(%s,3)n",ch); buffer=fgetc(fp); return buffer;while(isdigit(chi)ch+i = fgetc(fp
9、);chi = '0'id=3; printf("(%s ,3)n",ch); return(buffer); buffer=fgetc(fp); ch1=buffer;if(ch0 = ch1)ch2='0'printf("(%s,3)n",ch); buffer=fgetc(fp); return buffer; ch1='0' printf("(%s ,4)n",ch); buffer=fgetc(fp); id=4; return(buffer); void main() if
10、(fp=fopen("example.c","r")=NULL) /*只读方式打开一个文件*/ printf("error"); else cbuffer = fgetc(fp); /*fgetc( )函数:从磁盘文件读取一个字符*/ while (cbuffer!=EOF) if(cbuffer=' '|cbuffer='n') /*掠过空格和回车符*/ cbuffer=fgetc(fp); else if(isalpha(cbuffer) cbuffer=alphaprocess(cbuffer); else if (isdigit(cbuffer) cbuffer=digitprocess(cbuffer); else cbuffer=otherp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年版建筑工程安全措施费用合同
- 急诊护士工作计划
- 五年级上册音乐教学计划模板合集五篇
- 教学管理教学总结
- 给朋友道歉信15篇
- 学法工作计划合集七篇
- 新媒体营销(第三版) 课件 项目一 新媒体营销认知
- 酒店的辞职报告模板八篇
- 川教版信息技术九年级上册全册教案
- 安防基础知识培训(三星)
- 工程电力之DCS系统受电及系统复原调试措施
- 学前心理学 期末考试题库
- 小学数学人教三年级上册万以内的加法和减法解决问题
- 我国成人血脂异常防治指南解读
- 信息光学知到章节答案智慧树2023年苏州大学
- GB/T 28650-2012公路防撞桶
- GB/T 19559-2008煤层气含量测定方法
- 医院眼科医院雷火灸操作评分标准
- 富士康生产企业薪酬管理制度
- 二年级口算题卡
- 毕业设计工程造价预算书
评论
0/150
提交评论