C++-代码解析(词法分析、语法分析).doc

C++-代码解析(词法分析、语法分析).doc

ID:58676943

大小:45.50 KB

页数:22页

时间:2020-10-15

C++-代码解析(词法分析、语法分析).doc_第1页
C++-代码解析(词法分析、语法分析).doc_第2页
C++-代码解析(词法分析、语法分析).doc_第3页
C++-代码解析(词法分析、语法分析).doc_第4页
C++-代码解析(词法分析、语法分析).doc_第5页
资源描述:

《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、     

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。