资源描述:
《编译原理 词法分析程序 c++》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、编译原理词法分析程序C++#include#include#includeusingnamespacestd;/*全局变量*/ifstreaminfile;//读取目标字符串ofstreamoutfile;//向文件中输出结果charbuf1[64],buf2[64];//双缓冲char*p2;//指向双缓冲char数组的指针charci;//用来存储从文件中读取的单个charstringtoken;//多个ci组成的一个字符串stringkeyWord[]={"asm","do","if","return","type
2、def","auto","double","inline","short","typeid","bool","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","
3、operator","switch","void","const","false","private","template","volatile","const_cast","float","protected","this","wchar_t","continue","for","public","throw","while","default","friend","register","true","delete","goto","reinterpret_cast","try","NULL"};//保留字(摘自百度百科)最后一个"NULL是我自己加的"constintK
4、EYWORDLENGTH=64;//keyWord[]的长度/*全局变量*//*函数声明*/voidstart();//main函数开始时对程序的预处理voidget_ci();//获取字符,使用双缓冲boolisLetter(int);//判断是否是字母boolisDigit(int);//判断是否是数字boolisUnderLine(int);//判断是否是下划线boolisKeyWord(string);//判断是否是关键字chargetType(char);//获取ci的类型代表voidprintFile(string,string);//输出至文件voidretr
5、actPoint();//p2指针前移撤销一位/*函数声明*/voidmain(){start();//预处理,初始化while(true)//死循环直到主动跳出{token="";//每次循环时,清空get_ci();switch(getType(ci)){case'a'://a是字母的代表,当ci是字母是,进入这个case{token=token+ci;get_ci();while(isLetter(ci)
6、
7、isDigit(ci)
8、
9、isUnderLine(ci)){token=token+ci;get_ci();}//while循环跳出if(isKeyWord(to
10、ken)){printFile(token,"关键字");}else{printFile(token,"标识符");}//此时指针指向了下一个retractPoint();//所以指针要回退;}break;case'_':{token=token+ci;get_ci();while(isLetter(ci)
11、
12、isDigit(ci)
13、
14、isUnderLine(ci)){token=token+ci;get_ci();}//while循环跳出if(isKeyWord(token)){printFile(token,"关键字");}else{printFile(token,"标
15、识符");}//此时指针指向了下一个retractPoint();//所以指针要回退;}break;case'0':{while(isDigit(ci)
16、
17、ci=='.'){token=token+ci;get_ci();}printFile(token,"数值");retractPoint();}break;case'<':{get_ci();if(ci=='='){printFile("<=","运算符");}elseif(ci=='<'){printFile("<<","运算符");}else{printFi