欢迎来到天天文库
浏览记录
ID:52458939
大小:33.00 KB
页数:4页
时间:2020-03-27
《C++实现词法分析.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、#include#include#include#include#defineRWD8#defineOPEAR11#defineSEPAR6usingnamespacestd;//构建符号表stringRword[RWD]={"if","int","for","while","do","return","break","continue"};stringOpear[OPEAR]={"+","-","*","/","=",">","<",">=","<=","!=","
2、=="};stringSepar[SEPAR]={",",";","{","}","(",")"};voidmain(){vectorinput;vector::iteratoriter;/*将源代码中的单词从文件中读出按成分存放在input中*/ifstreammyf;stringstr="";myf.open("1.txt");if(myf.fail()){cout<<"error!"<3、SEPAR;i++)//判断是否为分隔符{stringtemp="";temp+=ch;if(temp==Separ[i]){if(str!=""){input.push_back(str);str="";}str=ch;input.push_back(str);str="";ch=myf.get();break;}}if(ch=='t'4、5、ch==''6、7、ch=='')//判断是否为空格,回车{if(str!=""){input.push_back(str);str="";}ch=myf.get();}elseif(ch=='!8、'9、10、ch=='>'11、12、ch=='<'13、14、ch=='=')//判断是否为运算符{if(str!=""){input.push_back(str);str="";}str=ch;ch=myf.get();if(ch=='='){str+=ch;input.push_back(str);ch=myf.get();str="";}else{input.push_back(str);}}elseif(ch=='+'15、16、ch=='-'17、18、ch=='*'19、20、ch=='/'){if(str!=""){input.push_back(str);str=21、"";}str+=ch;input.push_back(str);ch=myf.get();str="";}else{str+=ch;ch=myf.get();}}myf.close();/*读文件结束*//*进行词法分析,并输出*/for(iter=input.begin();iter!=input.end();iter++){intsign=0;for(inti=0;i22、eak;}}if(sign==0)//判断是否为运算符{for(inti=0;i23、((*iter)[0]>'0'&&(*iter)[0]<='9')cout<<"(3,""<<*iter<<"")"<
3、SEPAR;i++)//判断是否为分隔符{stringtemp="";temp+=ch;if(temp==Separ[i]){if(str!=""){input.push_back(str);str="";}str=ch;input.push_back(str);str="";ch=myf.get();break;}}if(ch=='t'
4、
5、ch==''
6、
7、ch=='')//判断是否为空格,回车{if(str!=""){input.push_back(str);str="";}ch=myf.get();}elseif(ch=='!
8、'
9、
10、ch=='>'
11、
12、ch=='<'
13、
14、ch=='=')//判断是否为运算符{if(str!=""){input.push_back(str);str="";}str=ch;ch=myf.get();if(ch=='='){str+=ch;input.push_back(str);ch=myf.get();str="";}else{input.push_back(str);}}elseif(ch=='+'
15、
16、ch=='-'
17、
18、ch=='*'
19、
20、ch=='/'){if(str!=""){input.push_back(str);str=
21、"";}str+=ch;input.push_back(str);ch=myf.get();str="";}else{str+=ch;ch=myf.get();}}myf.close();/*读文件结束*//*进行词法分析,并输出*/for(iter=input.begin();iter!=input.end();iter++){intsign=0;for(inti=0;i22、eak;}}if(sign==0)//判断是否为运算符{for(inti=0;i23、((*iter)[0]>'0'&&(*iter)[0]<='9')cout<<"(3,""<<*iter<<"")"<
22、eak;}}if(sign==0)//判断是否为运算符{for(inti=0;i23、((*iter)[0]>'0'&&(*iter)[0]<='9')cout<<"(3,""<<*iter<<"")"<
23、((*iter)[0]>'0'&&(*iter)[0]<='9')cout<<"(3,""<<*iter<<"")"<
此文档下载收益归作者所有