已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026国家管网集团高校毕业生招聘考试备考试题(浓缩500题)附参考答案详解(研优卷)
- 2026秋季国家管网集团浙江省天然气管网有限公司高校毕业生招聘笔试备考试题(浓缩500题)带答案详解(轻巧夺冠)
- 2026届国家管网集团高校毕业生招聘考试备考题库(浓缩500题)含答案详解
- 2025国网湖南省电力校园招聘(提前批)笔试模拟试题浓缩500题含答案详解(综合卷)
- 2026秋季国家管网集团建设项目管理公司高校毕业生招聘笔试参考题库(浓缩500题)含答案详解(综合题)
- 2025国网广西电力公司高校毕业生提前批招聘笔试模拟试题浓缩500题含答案详解(a卷)
- 2026秋季国家管网集团共享运营分公司高校毕业生招聘考试参考题库(浓缩500题)含答案详解(精练)
- 2026年驻马店市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)含答案详解(达标题)
- 2026国网北京市电力公司高校毕业生提前批招聘(约450人)笔试备考题库浓缩500题附答案详解(夺分金卷)
- 国家管网集团2026届高校毕业生招聘考试参考题库(浓缩500题)带答案详解(基础题)
- 2025成考英语词汇必背3500词
- 2025中医技能考试题及答案
- 质量控制流程梳理与执行标准
- 2025中科芯集成电路有限公司校园招聘笔试历年参考题库附带答案详解(3卷合一)
- 产品预购合同(标准版)
- 铁路工作安全培训课件
- 第4课 吃动平衡 健康体重 课件-2024-2025学年人教版(2024)初中体育与健康七年级全一册
- 致敬抗美援朝 争做时代新人-10.25抗美援朝纪念日主题班会(课件)
- 安徽载盛新材料有限公司二氧化硅表面改性项目环境报告表
- 中高层管理人员绩效考核办法
- 七年级数学__方位角_课件
评论
0/150
提交评论