编译原理 词法分析程序 C++

上传人:1888****888 文档编号:38064802 上传时间:2021-11-05 格式:DOC 页数:9 大小:46KB
收藏 版权申诉 举报 下载
编译原理 词法分析程序 C++_第1页
第1页 / 共9页
编译原理 词法分析程序 C++_第2页
第2页 / 共9页
编译原理 词法分析程序 C++_第3页
第3页 / 共9页
资源描述:

《编译原理 词法分析程序 C++》由会员分享,可在线阅读,更多相关《编译原理 词法分析程序 C++(9页珍藏版)》请在装配图网上搜索。

1、编译原理 词法分析程序 C+#include #include #include using namespace std;/*全局变量*/ifstream infile; /读取目标字符串ofstream outfile; /向文件中输出结果char buf164 ,buf264; /双缓冲char *p2; /指向双缓冲char数组的指针char ci; /用来存储从文件中读取的单个charstring token; /多个ci组成的一个字符串string keyWord=asm,do,if,return,typedef,auto,double,inline,short,typeid,boo

2、l,dynamic_cast,int,signed,typename,break,else,long,sizeof,union,case,enum,mutable,static,unsigned,catch,explicit,namespace,static_cast,using,char,export,new,struct,virtual,class,extern,operator,switch,void,const,false,private,template,volatile,const_cast,float,protected,this,wchar_t,continue,for,pub

3、lic,throw,while,default,friend,register,true,delete,goto,reinterpret_cast,try,NULL;/保留字(摘自百度百科)最后一个NULL是我自己加的const int KEYWORDLENGTH = 64; /keyWord的长度/*全局变量*/*函数声明*/void start(); /main函数开始时对程序的预处理void get_ci(); /获取字符,使用双缓冲bool isLetter(int); /判断是否是 字母bool isDigit(int); /判断是否是 数字bool isUnderLine(int)

4、; /判断是否是 下划线bool isKeyWord(string); /判断是否是 关键字char getType(char); /获取ci的类型 代表void printFile(string ,string);/输出至文件void retractPoint();/p2指针前移撤销一位/*函数声明*/void main()start();/预处理,初始化while (true)/死循环直到主动跳出token=;/每次循环时,清空get_ci();switch(getType(ci) case a:/a是字母的代表,当ci是字母是,进入这个casetoken=token+ci;get_ci(

5、);while (isLetter(ci)|isDigit(ci)|isUnderLine(ci)token=token+ci;get_ci();/while循环跳出if (isKeyWord(token)printFile(token,关键字);elseprintFile(token,标识符);/此时指针指向了下一个retractPoint();/所以指针要回退;break;case _:token=token+ci;get_ci();while (isLetter(ci)|isDigit(ci)|isUnderLine(ci)token=token+ci;get_ci();/while循环

6、跳出if (isKeyWord(token)printFile(token,关键字);elseprintFile(token,标识符);/此时指针指向了下一个retractPoint();/所以指针要回退;break;case 0:while (isDigit(ci)|ci=.)token =token +ci;get_ci();printFile(token,数值);retractPoint();break;case :get_ci();if (ci=)printFile(=,运算符);else if (ci=)printFile(,运算符);elseprintFile(=0 & ci:ge

7、t_ci();if (ci=)printFile(=,运算符);else if (ci=)printFile(,运算符);elseprintFile(,运算符);retractPoint();break;case( :printFile (,界符); break;case) :printFile (),界符); break;case :printFile (,界符); break;case :printFile (,界符); break;case; :printFile (;,界符); break;case. :printFile (.,界符); break;case, :printFile

8、(,界符); break;case :printFile (,界符); break;case :printFile (,界符); break;case# :printFile (#,界符);break;case :/空格时,跳出循环case n:case t:break;default:;infile.close();outfile.close();system(pause);/*/* 以下是子函数的定义 */*/void start()/此函数用于初始化cout本程序读取程序所在目录下的ASCII编码文件 in.txt 进行词法分析endl;cout分析结果输出至当前目录下的文件 out.t

9、xtendl;token=; /初始化takenp2=buf1; /指针预指向 buf163=-1; /每个缓冲数据结尾为-1buf263=-1;infile.open(in.txt,ios:in);/打开文件if (!infile)coutendl错误警告:未在程序当前目录下找到文件 in.txtendl;system(pause);exit(-1);outfile.open(out.txt,ios:out);/输出文件,方式:覆盖for (int i=0;i说明p2位于第一缓冲区结尾for (int i=0;i63;i+)/读取文件到buf2buf2i=infile.get();p2=bu

10、f2;get_ci();/递归调用自身(只一层而已)else if (p2=buf2+63)/p2指向buf2的结尾时for (int i=0;i63;i+)/读取文件到buf1buf1i=infile.get();p2=buf1;get_ci();/递归调用自身(只一层而已)else /p2没有指向buf1的结尾,也没有指向buf2的结尾,说明文件读取结束了infile.close();outfile.close();cout分析结束=A & c=a & c=0 & c=9)return true;elsereturn false;bool isUnderLine(int c) /判断是否是 下划线if (c=_)return true;elsereturn false;bool isKeyWord(string s) /判断是否是 关键字for (int i=0;iKEYWORDLENGTH;i+)if (s = keyWordi)return true;return false;void printFile(string s1,string s2)/输出至文件outfiles1 s2=A & c=a & c=0 & c=9)return 0 ;elsereturn c;

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!