欢迎来到天天文库
浏览记录
ID:58676943
大小:45.50 KB
页数:22页
时间:2020-10-15
《C++-代码解析(词法分析、语法分析).doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C++代码解析(词法分析、语法分析) 很久以前就想写个C++的类解析器了,终于花了一晚上时间,写了一个C++头文件和CPP文件的解析。其实跟我上篇“编译原理”的文章说的一样,词法分析和语法分析最基本就是一堆if-else或者switch-case。不要被什么有穷自动机吓倒了。。。 下面的代码是一个基本的词法和语法分析,能工作,但现在这个实验品,肯定不会很完善,请各位看官见谅。 能解析出来所包含的头文件、类名(输入.h文件可以解析出类名)、函数名等,需要的功能自己再加吧。 程序我直接一个main函数写下来的,完全C风格,不用跟我讲什么分函数、分类之
2、类的话,我也知道,后期我在代码上会分好,不过不一定贴上来了,要分你可以自己分一下,如果能共享出来给我学习一下,那更感谢了。 我这个程序就是让你看看一个词法分析和一个语法分析的最简单的写法,同时也实现一些有点用的功能。 下面就是这个程序代码,能直接拷贝编译运行的。代码也有注释,逻辑比较清楚了。 //CodeParser.cpp:Definestheentrypointfortheconsoleapplication. // #include"stdafx.h" #include #include #include<
3、stdlib.h> #include #include #include #include usingnamespacestd; //符号表 enumeType { Symbol }; mapg_mapSymbol; enumeCharFlag { noFlag, explain }; eCharFlagg_charFlag=noFlag; int_tmain(intargc,_TCHAR*argv[]) { //输入常用标识符 g_ma
4、pSymbol["if"]=Symbol; //获取输入 inti=0,j=0,k=0; charoneChar; charfname[200]; memset(fname,0,200); printf("请输入要打开的文件名:"); scanf("%s",fname); //for测试 //strcpy(fname,"d:\1.cpp"); //打开文件 FILE*fp; if((fp=fopen(fname,"r"))==NULL) { printf("Ca
5、nnotopeninfile."); exit(0); } //int0i; //分析文件 oneChar=fgetc(fp); charoneWord[256]={0}; intnBuf=0; vectorvecWords; while(oneChar!=EOF) { if(nBuf==0) { if(oneChar==''
6、
7、oneChar==''
8、
9、oneChar=='t') {
10、 } elseif(oneChar=='('
11、
12、oneChar=='{') { oneWord[nBuf++]=oneChar; stringstrWord=oneWord; vecWords.push_back(strWord); nBuf=0; g_charFlag=noFlag; memset(oneWord,0,256);
13、 //continue; } elseif(oneChar==')'
14、
15、oneChar=='}') { oneWord[nBuf++]=oneChar; stringstrWord=oneWord; vecWords.push_back(strWord); nBuf=0; g_charFlag=noFlag;
16、
此文档下载收益归作者所有