编译原理词法分析(C语言)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

数学与软件科学学院实验报告学期:2015至2016第2学期2016年3月1日课程名称:编译原理专业:信息与计算科学2013级5班实验编号:1实验名称:词法分析器指导教师:王开端学生姓名:李丹学号:2013060510实验成绩:实验一词法分析器实验目的:通过分析与设计,编写出一个此法分析程序,并能实现相应的功能。实验内容:设计一个词法分析器,使其能对输入的字符串进行分析,并识别是哪一类单词符号,并按照输出形式输出。实验步骤:1什么是词法分析词法分析是编译的第一个阶段,其任务是:从左至右逐个字符地对源程序进行扫描,产生一个个单词符号,把字符串形式的源程序改造成为单词符号串形式的中间程序。执行词法分析的程序称为词法分析程序,也称为词法分析器或扫描器。词法分析器的功能是输入源程序,输出单词符号。2单词符号分类单词符号是程序语言的基本语法单位,具有具体的语法意义。C语言的单词符号通常可以分为以下5类:保留字:if、else、do、while、case、switch标识符:letter(letter|digit)*整型常数:digit(digit)*运算符:+、-、*、/、、=、、=、==、=界符:,、;、(、)、{、}、:3词法分析程序输出单词符号的形式词法分析程序的输入是源程序字符串,输出是与源程序等价的单词符号序列,并且所输出的单词符号通常表示成如下的二元式:(单词种别,单词自身的值)表1C语言子集的单词符号及种别码表单词符号种别码单词符号种别码if1=14else215do3=16while4=17case5==18switch6,19digit(digit)*7;20letter(letter|digit)*8:21+9(22-10)23*11{24/12}2513#04状态转换图图1标识符状态转换图图2无符号整数状态转换图图3无符号数状态转换图图4词法分析转换图5流程图图5词法分析流程图6程序设计本实验在程序设计方面做了如下定义:指针数组*kt[]:用于存放关键字一维数组str[]:用于存放输入字符串一维数组token[]:用于存放分析过程中的字符字符ch:进行分析的字符num:单词种别码l:数组token大小j:分析字符个数length:输入串长度代码:#includestdio.h#includestring.hvoidmain(){char*kt[6]={if,else,do,while,case,switch};/*keywordtable*/charstr[10];chartoken[10];charch;intnum=1;inti;intl=0;/*lengthoftoken*/intj=0;intlength=0;clrscr();printf(Pleaseinputastring(endwith'#'):);do{scanf(%c,&ch);str[length]=ch;length++;}while(ch!='#');printf(-----------------------------------------------------\n);printf(\tWordsymbol\t\tTypecode\n);printf(-----------------------------------------------------\n);ch=str[j];while(num!=0){if(ch='0'&&ch='9'){while(ch='0'&&ch='9'){token[l]=ch;j++;l++;ch=str[j];}num=7;print(l,token,num);l=0;}/*ifchbetween0and9*/elseif((ch='a'&&ch='z')||(ch='A'&&ch='Z')){while((ch='a'&&ch='z')||(ch='A'&&ch='Z')||(ch='0'&&ch='9')){token[l]=ch;j++;l++;ch=str[j];}num=8;for(i=0;i6;i++)if(strcmp(token,kt[i])==0){num=i+1;break;}print(l,token,num);l=0;}/*ifchbetweenaandzorAandZ*/elseif(ch==''){while(ch==''){j++;ch=str[j];}}/*ifchis''*/elseswitch(ch){case'+':token[l]=ch;l++;j++;ch=str[j];num=9;print(l,token,num);l=0;break;case'-':token[l]=ch;l++;j++;ch=str[j];num=10;print(l,token,num);l=0;break;case'*':token[l]=ch;l++;j++;ch=str[j];num=11;print(l,token,num);l=0;break;case'/':token[l]=ch;l++;j++;ch=str[j];num=12;print(l,token,num);l=0;break;case'':token[l]=ch;l++;j++;ch=str[j];if(ch=='='){token[l]=ch;l++;j++;ch=str[j];num=14;print(l,token,num);}else{num=13;print(l,token,num);}l=0;break;case'':token[l]=ch;l++;j++;ch=str[j];if(ch=='='){token[l]=ch;l++;j++;ch=str[j];num=16;print(l,token,num);}else{num=15;print(l,token,num);}l=0;break;case'=':token[l]=ch;l++;j++;ch=str[j];if(ch=='='){token[l]=ch;l++;j++;ch=str[j];num=18;print(l,token,num);}else{num=17;print(l,token,num);}l=0;break;case',':token[l]=ch;l++;j++;ch=str[j];num=19;print(l,token,num);l=0;break;case';':token[l]=ch;l++;j++;ch=str[j];num=20;print(l,token,num);l=0;break;case':':token[l]=ch;l++;j++;ch=str[j];num=21;print(l,token,num);l=0;break;case'(':token[l]=ch;l++;j++;ch=str[j];num=22;print(l,token,num);l=0;break;case')':token[l]=ch;l++;j++;ch=str[j];num=23;print(l,token,num);l=0;break;case'{':token[l]=ch;l++;j++;ch=str[j];num=24;print(l,token,num);l=0;break;case'}':token[l]=ch;l++;j++;ch=str[j];num=25;print(l,token,num);l=0;break;case'#':token[l]=ch;l++;num=0;print(l,token,num);break;default:j++;ch=str[j];break;}/*switch*/}/*whilejlength*/}/*main*/print(intl,chartoken[],intnum){inti;printf(\t);for(i=0;il;i++)printf(%c,token[i]);printf(\t\t\t%d\n,num);}实验结果:实验心得:通过这次试验,更进一步的了解与认识编译原理这门课程。实践是对理论的巩固,在这次试验中,需要我们先从书本了解什么是词法分析,词法分析的过程是怎样的,需要我们画出相关的图和表才可能有更加清晰的思路和方法来编制程序代码,设计出词法分析器,并且实现词法分析器的功能。

1 / 12
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功