




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、大学实验报告一实验类型:口验证口综合设计口创新实验日期:2013.4实验成绩:词法分析程序设计一、实验目的掌握计算机语言的词法分析程序的开发方法。二、实验容编制一个能够分析三种整数、标识符、主要运算符和主要关键字的词法分析程序。三、实验要求1、根据状态图,设计词法分析函数intscan(),完成以下功能:1)从文本文件中读入测试源代码,根据状态转换图,分析出一个单词,2)以二元式形式输出单词单词种类,单词属性>其中单词种类用整数表示:0:标识符1:十进制整数2:八进制整数3:十六进制整数运算符和界符,关键字采用一字一符,不编码其中单词属性表示如下:标识符,整数由于采用一类一符,属性用单词
2、表示运算符和界符,关键字采用一字一符,属性为空2、编写测试程序,反复调用函数scan(),输出单词种别和属性。四、实验环境PC微机DOS操作系统或Windows操作系统TurboC程序集成环境或VisualC+程序集成环境五、实验步骤编辑一个文本文件program.txt,在文件中输入如下容:ifdata+92>0x3fthendata=data+01;elsedata=data-01;正确结果:<if,->< 0,data>< +,->< 1,92>< >>->< 3,3f><then,->
3、< 0,data>< =,>< 0,data>< +,->< 2,1>< ;,-><else,->< 0,data>< =,->< 0,data>< -,->< 2,->< ;,->【实验代码】#include<iostream>#include<string>usingnamespacestd;#defineMAX5charch=''stringkey5="if","t
4、hen","else","while","do"intIskey(stringc)关键字判断inti;for(i=0;i<MAX;i+)if(pare(c)=0)return1;return0;intIsLetter(charc)判断是否为字母if(c<='z')&&(c>='a')|(c<=Z)&&(c>='A')return1;elsereturn0;intIsLetter1(charc)判断是否
5、为a-f字母if(c<='f)&&(c>='a')|(c<='F')&&(c>='A')return1;elsereturn0;intIsDigit(charc)判断是否为数字if(c>='0'&&c<='9')return1;elsereturn0;voidscan(FILE*fpin)stringarr=""while(ch=fgetc(fpin)!=EOF)arr=""if(ch
6、=''|ch='t'|ch='n')elseif(IsLetter(ch)11ch='_')arr=arr+ch;ch=fgetc(fpin);while(IsLetter(ch)|IsDigit(ch)if(ch<='Z')&&(ch>='A')ch=ch+32;arr=arr+ch;ch=fgetc(fpin);fseek(fpin,-1L,SEEK_CUR);if(Iskey(arr)cout<<arr<<"t$关键字"&
7、lt;<endl;elsecout<<arr<<"t$普通标识符"<<endl;elseif(IsDigit(ch)intflag=0;if(ch='0')arr=arr+ch;ch=fgetc(fpin);if(ch>='0'&&ch<='7')while(ch>='0'&&ch<='7')(flag=1;arr=arr+ch;ch=fgetc(fpin);)elseif(ch='x
8、9;|ch='X')(flag=2;arr=arr+ch;ch=fgetc(fpin);while(lsDigit(ch)|lsLetter1(ch)(arr=arr+ch;ch=fgetc(fpin);)elseif(ch=''|ch=','|ch='')cout«arr«"t$整数O"«endl;)fseek(fpin,-1L,SEEK_CUR);if(flag=1)cout«arr«"t$八进制整数"«endl;elseif(
9、flag=2)cout«arr«"t$十六进制整数"<<endl;)else(arr=arr+ch;ch=fgetc(fpin);while(lsDigit(ch)(arr=arr+ch;ch=fgetc(fpin);)fseek(fpin,-1L,SEEK_CUR);cout«arr«"t$十进制整数"«endl;)elseswitch(ch)voidmain()case'+':case'-':case'*':case'=':c
10、ase'/':cout«ch«"t$运算符"«endl;break;case'C:case')':case'':case'':case'':case'.':case',':case'':case'':cout«ch«"t$界符"«endl;break;case':':ch=fgetc(fpin);if(ch='='
11、)cout«":="«"t$运算符"«endl;elsecout«":"«"t$界符"«endl;fseek(fpin,-1L,SEEK_CUR);break;case'>':ch=fgetc(fpin);if(ch='=')cout«">="«"t$运算符"«endl;if(ch='>')cout«"
12、»"«"t$输入控制符"«endl;elsecout«">"«"t$运算符"«endl;fseek(fpin,-1L,SEEK_CUR);break;case'<':ch=fgetc(fpin);if(ch='=')cout«"<="«"t$运算符"«endl;elseif(ch='<')cout«"
13、71;"«"t$输出控制符"<<endl;elseif(ch='>')cout«"<>"«"t$运算符"«endl;elsecout«"<"«"t$运算符"«endl;fseek(fpin,-1L,SEEK_CUR);break;default:cout«ch«"t$无法识别字符"<<endl;charin_fn30;FILE*fpin;cout<<"请输入源文件名(包才路径和后缀名):";for(;)cin>>in_fn;if(fpin=fopen(in_fn,"r")!=NULL)break;elsecout<<"
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司宿舍水电管理制度
- 导管抽吸取栓与支架取栓对急性前循环闭塞性脑卒中疗效分析
- 2025合作协议书(无固定期限)范本
- 2025员工服务合同续签意向书
- 安徽省合肥市2024~2025学年 高二下册第二次检测数学试卷附解析
- 2024~2025学年 重庆市七校联考高一语文上册第一次联考试卷附答案
- 走进社会主义市场经济 同步练习
- 跨界融合下的职业转型策略-洞察阐释
- 历史建筑群保护社区青年创业孵化器规划基础知识点归纳
- 基于AI的卫星通信跨域数据传输技术-洞察阐释
- 施工现场脚手架搭设的示例图解
- 2024年甘肃兰州中考满分作文《向内扎根向阳而生》
- 苗圃建设可行性研究报告
- 探寻生物活性肽:基于抗氧化作用的药理活性解析
- 《磁共振成像对比剂的应用与研究》课件
- 2022-2023学年浙江省金华市义乌市部编版六年级下册期末考试语文试卷(原卷版+解析)
- 幼儿园夏日饮食安全
- 2025年度医疗健康咨询服务兼职医生聘用合同
- 资产并购合同协议范本
- 工程法律培训
- 国开新媒体营销形考任务1-4答案国家开放大学学习网形考答案
评论
0/150
提交评论