下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生产安全标准化作业指导手册
- 质量保障诚信承诺书(9篇)
- 公益捐款资金管理承诺函8篇
- 技术报告书写及数据解读标准工具
- 强化业务成效贡献力量的承诺书(4篇)
- 九江市重点中学2026届初三1月语文试题含解析
- 浙江省部分地区2026届初三核心模拟卷(下)化学试题含解析
- 临床导管相关性血流感染预防和护理
- 湖北省孝感市孝南区肖港初级中学2026年初三4月普通高中中考适应性测试一模英语试题含解析
- 江苏省江阴市澄西片重点中学2026届初三3月11的语文试题测试卷含解析
- 新视野大学英语(第四版)读写教程3(思政智慧版) 教案 B3U4 Unit 4 When work is a pleasure
- 毫米波雷达行业深度研究报告:4D毫米波雷达
- 拆除工程施工方案
- 装修安全施工承诺书
- 《楚门的世界》电影赏析
- 人工智能芯片设计 课件 周巍 第1-3章-绪论、数字集成电路设计 -数字集成电路系统设计
- 房颤导致血栓护理
- DB32∕T 1649-2010 公路养护工程预算编制办法及定额
- 《退休不褪色余热亦生辉》学校退休教师欢送会
- 汽车电器线束DFMEA范例
- 2024年九江杭氧气体有限公司招聘笔试参考题库附带答案详解
评论
0/150
提交评论