博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编译原理词法分析
阅读量:6926 次
发布时间:2019-06-27

本文共 5047 字,大约阅读时间需要 16 分钟。

学习计算机或者软件工程的人都知道编译原理是一门非常重要的课程,下面是本人学习编译原理过后写的词法分析的源码,喜欢的可以看看,顺便我附上一个下载地址:

地址一:

地址二:

####include 
#####include
#####include
#####include
#####include
#####include
#####include
using namespace std;class Content{private:int id;int forToken;string content;char character;char *token;char *characterSet;int c;string str;map
store;public:string getStr();long getLength();int getC();void display();bool operator==(char rch);Content(string content);~Content();void stringToChar();char get_Char();bool getbe();void concatenation();bool letter();bool digit();int reserve();void retract();void buildList();string error();string analysis();};//bool Content::operator==(char rch){// char lch;// if(strcpy(&lch,&rch)==0){// return 1;// }// else// return 0;//}Content::Content(string _content){content=_content;c=0;id=0;character=' ';forToken=0;str="";characterSet=new char[content.length()+1];//最后又'\0'token=new char[100];}Content::~Content(){free(characterSet);free(token);delete []characterSet;delete []token;}void Content::stringToChar(){strcpy(characterSet,content.c_str());//返回的是const char*,也就是字符数组的首地址}/*www.panmama.com 转载请务必告知*/int Content::getC(){return c;}long Content::getLength(){return content.length();}char Content::get_Char(){character=characterSet[c];if(!(character==' ')||!(character!='\n')||!(character!='\t')){c++;}//非空符号,指针向后加1return character;}bool Content::getbe(){if(character==' '||character=='\n'||character=='\t'){c++;return 1;}return 0;}void Content::display(){for(int i=0; i
='0'&&character<='9')return true;return false;}bool Content::letter(){if((character>='a'&&character<='z')||(character>='A'&&character<='Z')){return true;}return false;}int Content::reserve(){// int i=0;// str="";// while(token[i]!=' ')// {// str+=token[i];// i++;// }str=getStr();if(str=="if"){return 4;}else if(str=="int"){return 1;}else if(str=="for"){return 6;}else if(str=="char"){return 3;}else if(str=="void"){return 12;}else if(str=="main"){return 2;}else if(str=="else"){return 5;}else if(str=="case"){return 9;}else if(str=="while"){return 7;}else if(str=="float"){return 11;}else if(str=="const"){return 12;}else if(str=="break"){return 13;}else if(str=="switch"){return 8;}else if(str=="return"){return 14;}else if(str=="switch"){return 8;}else if(str=="double"){return 15;}else if(str=="string"){return 16;}else if(str=="printf"){return 17;}else{return 0;}}void Content::retract(){c--;character=' ';}void Content::buildList(){//id=18;store.insert(pair
(1,"int"));store.insert(pair
(2,"main"));store.insert(pair
(3,"char"));store.insert(pair
(4,"if"));store.insert(pair
(5,"else"));store.insert(pair
(6,"for"));store.insert(pair
(7,"while"));store.insert(pair
(8,"switch"));store.insert(pair
(9,"case"));store.insert(pair
(11,"float"));store.insert(pair
(12,"const"));store.insert(pair
(13,"break"));store.insert(pair
(14,"return"));store.insert(pair
(15,"double"));store.insert(pair
(16,"string"));store.insert(pair
(17,"printf"));store.insert(pair
(id,str));// if(id!=20)// id++;// else// id=21;}string Content::error(){return "有误";}string Content::analysis(){char s;string num;int k;for(int i=0; i<100; i++){token[i]=' ';}s=get_Char();//从数组中取一个字符if(getbe())//是空格return "";//是空格返回“”switch(s){case 'a':case 'b':case 'c':case 'd':case 'e':case 'f':case 'g':case 'h':case 'i':case 'j':case 'k':case 'l':case 'm':case 'n':case 'o':case 'p':case 'q':case 'r':case 's':case 't':case 'u':case 'v':case 'w':case 'x':case 'y':case 'z':while(letter()||digit()){concatenation();get_Char();}forToken=0;k=reserve();if(k==0){buildList();return "(10,ID)";}else{buildList();stringstream ss;string first;string second;ss<
::iterator iter;for(iter=store.begin(); iter!=store.end(); iter++){if(iter->first==k)second=iter->second;}return "("+first+","+second+")";}break;case '0':case '1':case '2':case '3':case '4':case '5':case '6':case '7':case '8':case '9':while(digit()){concatenation();get_Char();}retract();//budlist();对其登记num=getStr();return "("+num+",NUM)";break;case'+':return "(22,+)";break;case'-':return "(23,-)";break;case'*':return "(24,*)";break;case'/':return "(25,/)";break;case'(':return "(26,()";break;case')':return "(27,))";break;case'[':return "(28,[)";break;case']':return "(29,])";break;case'{':return "(30,{)";break;case'}':return "(31,})";break;case'"':return "(41,\")";break;case',':return "(32,,)";break;case':':return "(33,:)";break;case';':return "(34,;)";break;case'<':get_Char();if(character=='='){return "(38,<=)";}else{retract();return "(36,<)";}break;case'>':get_Char();if(character=='='){return "(37,>=)";}else{retract();return "(35,>)";}break;case'=':get_Char();if(character=='='){return "(39,==)";}else{retract();return "(21,=)";}break;case'!':get_Char();if(character=='='){return "(40,!=)";}else{retract();}break;case '\0':return "1000";break;default:error();}}int main(){string temp="int main(){int c=33;if(c=33){printf();}}";Content b=(temp);b.stringToChar();//c.display();while(b.getC()

本人建个qq群,欢迎大家一起交流技术, 群号:512245829 喜欢微博的朋友关注:转盘娱乐即可

你可能感兴趣的文章
Sql语句-case when then else end
查看>>
main函数中argc理解
查看>>
ArrayList与List对象用法与区别
查看>>
C++ 排序函数 sort(),qsort()的使用方法
查看>>
Python 隔离沙箱 virtualenv
查看>>
C中结构体的存储分配
查看>>
windows forms 上一个类似于wpf snoop 的工具: Hawkeye
查看>>
vector relation
查看>>
阶乘 求n!中质因数的个数
查看>>
Android下得到已安装Application信息
查看>>
Quartz中时间表达式的设置-----corn表达式
查看>>
Android 开源框架Universal-Image-Loader完全解析(三)---源代码解读
查看>>
windows下使用TortoiseGit代替Git命令行操作
查看>>
动手与实践同步进行 认真做好本职工作
查看>>
第46周四
查看>>
JSTL c标签,fn标签,fmt标签 - 生活在爪洼岛上 - ITeye技术网站
查看>>
详细讲解WaterRefreshLoadMoreView的使用
查看>>
Maximal Rectangle
查看>>
Ubuntu 14.04 LTS中怎样解决系统设置残缺的问题
查看>>
ONE
查看>>