欢迎来到天天文库
浏览记录
ID:30920906
大小:101.66 KB
页数:11页
时间:2019-01-04
《词法分析器分析加代码(编译原理)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、现在在学编译原理,做了个简单的词法分析器。可以自定义关键字、界符以及运算符。效果如下:请输入要解析的文件名template,txt请输入该编程语言的关键字ifwhileelsereturn请输入该编程语言的运算符,格式为符号名称符号+jia-jian*cheng/chu=fuzhi==deng请输入该编程语言的界符,格式为符号名称符号(left)right$comma;fengao{dakuohao}xiaokuohao辽Azint$标识符main$标识符($界符left)$界fright{$界符da
2、kuohaoint$柿识符a$棕识符;$界符fengaoint$袜识符b$棕识符;$界符fengaoint$袜识符C$棕识符;$界符fengaoc$袜识符+$运算待jiac$标识符=$运算符fuzhia$标识符;$界符fengaowhile$关讎字、1($界符leftc$袜识符=$运算符fuzhi=$运負持fuzhi1$整型)$界fright{$界符dakuohaoa$棕识符有一点不满意的地方是必须输入两次ctrl+z,原来打算的是按下回车就结束输入的还有一点想法是不输入这些设置,而是读取一个配置文件
3、,识别关键字,界符以及运算符代码如下:#include#include#inelude#include#include#includc〈string>#include〈fstream>usingnamespacestd;vectorkeywords;vector>symble;vector>bound;charch;inti
4、sKeyWord(conststring&s,int&n)if(keywords・empty())for(vector::iteratorit=keywords・begin();it!二keywords・end();it++,n++){if(s=*it){return1;}}returnT;}intisSymble(conststring&s,string&result){for(vector>::iteratorit二symble.begin(
5、);it!二symble.encl();it++){if(s=(*it).first)result二(*it)・second;return0;}intisBound(conststring&s,string&result)!for(vector>::iteratorit二bound.begin();it!二bound.end();it++){if(s=(*it)・first){result=(*it)・second;return1;}}retum0;}voida
6、nalyse(FILE*fp)stringtemp二stringstr二stringresult二;intid=0;while((ch=fgetc(fp))!=EOF){〃〃temp=;str=ch;id二0;if(ch二二,,
7、
8、ch二二’t,
9、
10、ch二二’\ch二二,r){while(ch二二’’Ich二二’t'
11、
12、ch二二’'
13、ch二二'){ch=fgetc(fp);;fseek(fp,-lL,SEEK_CUR);}elseif(isalpha(ch)){while(isalph
14、a(ch)
15、
16、isdigit(ch))temp二temp+ch;ch二fgetc(fp);fscek(fp,-lL,SEEK_CUR);if(isKeyWord(temp,id)==1){endl;cout<17、mp<<“t$整型〃<
17、mp<<“t$整型〃<
此文档下载收益归作者所有