您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 编译原理词法分析器实验报告
《编译原理》实验报告——词法分析器院系:班级:姓名:学号:词法分析器实验报告一、实验目的:设计一个词法分析程序,理解词法分析器实现的原理,掌握程序设计语言中的各类单词的词法分析方法,加深对词法分析原理的理解。二、实验原理:词法分析是从左向右扫描每行源程序的符号,拼成单词,换成统一的二元式(单词种别码,单词符号的属性值)表示。对给定的程序通过词法分析器识别一个个单词符号,并以二元式(单词种别码,单词符号的属性值)显示,本程序则是通过对给定路径的文件的分析后以单词符号和文字提示显示)三、实验说明:(1)关键字:begin,end,if,then,else,while,write,read,do,call,const,char,until,procedure,repeat(2)运算符:+,-,*,/,=(3)界符:{,},[,],;,,,.,(,),:(4)其他标记如字符串,表示以字母开头的标识符(5)空格、回车、换行符跳过(6)运行结果在屏幕上以如下格式显示:1$无符号整数begin$关键字if$关键字+$运算符;$界符a$普通标识符//“$“为美元符号,不是大写字母S测试功能时,可以多次设置包含不同字符,关键字的待解析文件,但要保证输入文件和后缀名时准确无误,仔细察看运行结果,检测该分析器的分析结果是否正确四、源代码:#includeiostream#includestringusingnamespacestd;#defineMAX22charch='';stringkey[15]={begin,end,if,then,else,while,write,read,do,call,const,char,until,procedure,repeat};intIskey(stringc){//关键字判断inti;for(i=0;iMAX;i++){if(key[i].compare(c)==0)return1;}return0;}intIsLetter(charc){//判断是否为字母if(((c='z')&&(c='a'))||((c='Z')&&(c='A')))return1;elsereturn0;}intIsDigit(charc){//判断是否为数字if(c='0'&&c='9')return1;elsereturn0;}voidanalyse(FILE*fpin){stringarr=;while((ch=fgetc(fpin))!=EOF){arr=;if(ch==''||ch=='\t'||ch=='\n'){}elseif(IsLetter(ch)){while(IsLetter(ch)||IsDigit(ch)){if((ch='Z')&&(ch='A'))ch=ch+32;arr=arr+ch;ch=fgetc(fpin);}fseek(fpin,-1L,SEEK_CUR);if(Iskey(arr)){coutarr\t$关键字endl;}elsecoutarr\t$普通标识符endl;}elseif(IsDigit(ch)){while(IsDigit(ch)||ch=='.'&&IsDigit(fgetc(fpin))){arr=arr+ch;ch=fgetc(fpin);}fseek(fpin,-1L,SEEK_CUR);coutarr\t$无符号实数endl;}elseswitch(ch){case'+':case'-':case'*':case'=':case'/':coutch\t$运算符endl;break;case'(':case')':case'[':case']':case';':case'.':case',':case'{':case'}':coutch\t$界符endl;break;case':':{ch=fgetc(fpin);if(ch=='=')cout:=\t$运算符endl;else{cout=\t$运算符endl;;fseek(fpin,-1L,SEEK_CUR);}}break;case'':{ch=fgetc(fpin);if(ch=='=')cout=\t$运算符endl;if(ch=='')cout\t$输入控制符endl;else{cout\t$运算符endl;fseek(fpin,-1L,SEEK_CUR);}}break;case'':{ch=fgetc(fpin);if(ch=='=')cout=\t$运算符endl;elseif(ch=='')cout\t$输出控制符endl;elseif(ch=='')cout\t$运算符endl;else{cout\t$运算符endl;fseek(fpin,-1L,SEEK_CUR);}}break;default:coutch\t$无法识别字符endl;}}}voidmain(){charin_fn[30];FILE*fpin;cout请输入源文件名(包括路径和后缀名):;for(;;){cinin_fn;if((fpin=fopen(in_fn,r))!=NULL)break;elsecout文件路径错误!请输入源文件名(包括路径和后缀名):;}cout\n********************分析如下*********************endl;analyse(fpin);fclose(fpin);coutendl;cout按任意键结束endl;inta;cina;}运行结果截图:输入:输出:生成的单词表目标文件:
本文标题:编译原理词法分析器实验报告
链接地址:https://www.777doc.com/doc-5493201 .html