欢迎来到天天文库
浏览记录
ID:51943792
大小:21.00 KB
页数:5页
时间:2020-03-20
《编译原理词法分析.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、上机练习一:词法分析一个PASCAL语言子集(PL/0)词法分析器的设计与实现1.按照P45的算法思想,使用循环分支方法实现PL/0语言的词法分析器,该词法分析器能够读入使用PL/0语言书写的源程序,输出单词符号串及其属性到一中间文件中,具有一定的错误处理能力,给出词法错误提示。2.源代码#include#include#includeusingnamespacestd;#defineMAX1000stringkey[15]={"begin",
2、"end","if","then","else","while","write","read","do","call","const","var","procedure","program","odd"};//保留字intIsLetter(charc)//判断字母{if(((c<='z')&&(c>='a'))
3、
4、((c<='Z')&&(c>='A')))return1;elsereturn0;}intIsDigit(charc)//判断数字{if((c>='0')&&(c<='9'))retur
5、n1;elsereturn0;}intIsKey(stringstrToken)//判断保留字{inti;for(i=0;i<15;i++){if(key[i].compare(strToken)==0)returni;}return15;}stringConcat(charch,stringstrToken){strToken+=ch;returnstrToken;}intmain(){ifstreamfile;intr=0;charch;intl=0;intID;//保留字的idstrings
6、trToken="";file.open("1.txt");//打开第i个记事本if(!file)cout<<"打开文件失败!";ch=file.get();while(!file.eof()){//if(ch==''
7、
8、ch=='t'
9、
10、ch=='')//滤掉空白字符//while(ch=='')//l++;if(ch==''
11、
12、ch=='t')ch=file.get();while(ch==''){l++;ch=file.get();}if(IsLetter(ch)){strT
13、oken="";//每次都需要对strToken置空串处理while(IsLetter(ch)
14、
15、IsDigit(ch)){strToken=Concat(ch,strToken);ch=file.get();}ID=IsKey(strToken);if(ID<15){cout<<"保留字为:"<16、en置空串处理while(IsDigit(ch)){strToken=Concat(ch,strToken);ch=file.get();}if(IsLetter(ch))//数字后面跟字母,错误词法{while(IsLetter(ch)17、18、IsDigit(ch)){strToken=Concat(ch,strToken);ch=file.get();}cout<<"词法错误!(数字后面跟字母)"<19、}elseswitch(ch){case'+':{cout<<"标识符为:"<<"+"<'20、:{ch=file.get();if(ch=='=')cout<<"标识符为:"<<">="<"<')cout<<"标识符为:"<<"<>"<
16、en置空串处理while(IsDigit(ch)){strToken=Concat(ch,strToken);ch=file.get();}if(IsLetter(ch))//数字后面跟字母,错误词法{while(IsLetter(ch)
17、
18、IsDigit(ch)){strToken=Concat(ch,strToken);ch=file.get();}cout<<"词法错误!(数字后面跟字母)"<19、}elseswitch(ch){case'+':{cout<<"标识符为:"<<"+"<'20、:{ch=file.get();if(ch=='=')cout<<"标识符为:"<<">="<"<')cout<<"标识符为:"<<"<>"<
19、}elseswitch(ch){case'+':{cout<<"标识符为:"<<"+"<'
20、:{ch=file.get();if(ch=='=')cout<<"标识符为:"<<">="<"<')cout<<"标识符为:"<<"<>"<
此文档下载收益归作者所有