已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验1-4 S语言词法分析器设计实验1-3 S语言词法分析器设计一、实验名称:S语言词法分析器设计二、实验目的:通过手工编写简化C语言词法分析器,熟悉并深入理解编译程序词法分析器的工作原理。三、实验内容:1根据保留字和特殊符号表能区分出源文件中的保留字、普通标识符和特殊符号,并能进行简单的错误处理。2设计词法分析器模块调用结构图和各模块流程图。3程序源代码。4程序的执行结果:输入文件,输出结果文件及屏幕信息。四、实验中出现的问题及解决方法。遇到问题及解决:1、关于注释/和除号/。需要区分,在isanotation函数中。2、关于遇到空格时回退,一开始没有懂,后来经过同学讲解,明白了如何回退的。3、关于词法分析器的思想过程,经过老师再三讲解,已经大致明白,具体步骤,在最后体会部分中。五、程序结构和代码程序结构:代码:7#include#include#include#includeusing namespace std;/关键字表string keywords20=include,void,main,int,char,float,double,if,else,then,break,continue,for,do,while,printf,scanf,begin,end,return;char aa99999= ;/关键字表初始为空string id10000;int pp=0;/常数表string nu10000;int qq=0;/初始化函数void initscanner()int i=0;FILE *fp;if(fp=fopen(源程序.txt,r)=NULL)/打开源程序文件printf(没有找到此文件!);exit(0);char ch=fgetc(fp);while(ch!=EOF)aai=ch;i+;ch=fgetc(fp);fclose(fp);int decide1(char a) /判断是否是字母if(a=a&a=A&a=0&a=9)return 1;else return 0;int isalpha(int st) /识别保留字和标识符char wordbuf20= ;int n=0;for( ; ; )wordbufn=aast;st+;n+;if(decide2(aast)=1)|(decide1(aast)=1)|(aast=_)wordbufn=aast;else break;int flag=0;for(int k=0;k20;k+)if(strcmp(keywordsk.c_str(),wordbuf)=0) flag=1;if(flag=0)int flagg=-1;for(int t=0;tpp;t+)if(strcmp(idt.c_str(),wordbuf)=0)flagg=t;if(flagg!=-1) printf( (id,%d) ,flagg);elseidpp=wordbuf;printf( (id,%d) ,pp);pp+;elseprintf( ();for(int i=0;in;i+)printf(%c,wordbufi);printf(,-) );return st;int isnumber(int st) /识别数字char numbuf20= ;int n=0;int k=0;int flag=0;for( ; ; )numbufn=aast;st+;n+;if(decide2(aast)=1)numbufn=aast;else if(k=0)&(aast=.)numbufn=aast;k+;else if(decide1(aast)=1)numbufn=aast;flag=1;continue;else break;if(flag=0)int flagg=-1;for(int t=0;tqq;t+)if(strcmp(nut.c_str(),numbuf)=0)flagg=t;if(flagg!=-1) printf( (nu,%d) ,flagg);elsenuqq=numbuf;printf( (nu,%d) ,qq);qq+;elseprintf( ();for(int i=0;in;i+) printf(%c,numbufi);printf(,错误) );return st;int isanotation(int st) /处理除号/和注释char tabuf9999= ;int n=0;st+;if(aast=/)printf( (/,-) );st+;while(aast!=10)tabufn=aast;st+;n+;printf( ();for(int i=0;in;i+)printf(%c,tabufi);printf(,注释内容) );else if(aast=*)printf( (/*,-) );st+;int stt=st+1;while(1)if(aast=*&aast+1=/) break;tabufn=aast;st+;n+;if(aast+1=NULL)printf(/* 错误n);return st+1;printf( ();for(int i=0;i: st+;if(aast=)st+;printf( (rlop,=) );else printf( (rlop,) );break;case : st+;if(aast=)st+;printf( (rlop,=) );else printf( (rlop,) );break;case %: st+;if(aast=)st+;printf( (%=,-) );else printf( (%,-) );break;case !: st+;if(aast=)st+;printf( (!=,-) );else printf( (!,错误!) );break;case &: st+;if(aast=&)st+;printf( (&,-) );else printf( (&,错误) );break;case |: st+;if(aast=|)st+;printf( (|,-) );else printf( (|,错误) );break;case : st+;printf( (,-) );break;case : st+;printf( (,-) );break;case (: st+;printf( (,-) );break;case ): st+;printf( (),-) );break;case : st+;printf( (,-) );break;case : st+;printf( (,-) );break;case : st+;printf( (:,-) );break;case #: st+;printf( (#,-) );break;case ;: st+;printf( (;,-) );break;case .: st+;printf( (.,-) );break;case ,: st+;printf( (,-) );break;case : st+;break;case : st+;break;case 10: st+;printf(n);break;case 34: st+;printf( (,-) );break;case 39: st+;printf( (,-) );break;default: printf( (%c,错误) ,aast);st+;return st;int lexscan(int st) /根据读入的单词的第一个字符确定调用不同的单词识别函数if(decide1(aast)=1)/如果是字母st=isalpha(st);else if(decide2(aast)=1)/如果是数字st=isnumber(st);else if(aast=/)/如果是标识符或关键字st=isanotation(st);else st=isother(st);/其他特殊字符return st;void scanner() /若文件未结束,反复调用lexscan函数识别单词int i=0;while(aai!=NULL)i=lexscan(i);void print()coutendl;coutendl关键字、标示符表如下:endl;cout=endl;for(int i=0;ipp;i+)co
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 ISO/IEC 24791-5:2025 EN Information technology - Radio frequency identification for item management software system infrastructure - Part 5: Device interface
- 酒店员工培训课程
- 酒店公寓消防安全
- 语言赏析方法
- 钢筋间距检查方法
- 纸板创想成型方法
- 2025-2026学年北京市房山区初二政治上册期中考试试卷及答案
- 招聘外包协议书
- 孕妇营养漫画指南
- 2025版肾结石症状及护理要点详解
- DB61T 1121-2018 政务服务中心建设规范
- 【2025年】辅警招聘考试试卷题库《综合理论知识》附答案
- 中小学网络安全知识竞赛题库及答案
- 腔隙性脑梗死课件教学
- 2025食品检验员知识初级考核题库及答案
- 2025至2030中国军工行业市场发展现状及发展趋势与发展趋势分析与未来投资战略咨询研究报告
- 2025-2030中国数控卧式车床行业运行动态及盈利前景预测报告
- 竹荪菌种制作技术
- 教科版(2024)科学二年级第一单元《5.建造小房子》教学设计
- 2025年注册安全工程师考试化工(中级)安全生产专业实务试卷及解答
- 四川旭虹光电科技有限公司曲面显示用盖板玻璃生产线(二期)环评报告
评论
0/150
提交评论