编译原理课程设计-词法分析器(附含源代码)_第1页
编译原理课程设计-词法分析器(附含源代码)_第2页
编译原理课程设计-词法分析器(附含源代码)_第3页
编译原理课程设计-词法分析器(附含源代码)_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、编译原理 - 词法分析器的设计1 设计说明及设计要求一般来说, 编译程序的整个过程可以划分为五个阶段: 词法分析、 语法分析、中间代码生成、 优化和目标代码生成。 本课程设计即为词法分析阶段。 词法分析阶段是编译过程的第一个阶段。 这个阶段的任务是从左到右一个字符一个字符地读入源程序, 对构成源程序的字符流进行扫描和分解, 从而识别出一个个单词 (也称单词符号或符号)。如保留字(关键字或基本字)、标志符、常数、算符和界符等等。2 设计中相关关键字说明1 基本字: 也称关键字, 如 C 语言中的 if , else , while , do ,for,case,break, return 等。2

2、 标志符:用来表示各种名字,如常量名、变量名和过程名等。3 常数:各种类型的常数,如12,和“ABC等。4 运算符:如 + , - , * , / ,%, < , > ,<= , >=等。5 界符,如逗点,冒号,分号,括号, # , 等。、程序分析 词法分析是编译的第一个阶段, 它的主要任务是从左到右逐个字符地对源程序进行扫描,产生一个个单词序列,用以语法分析。词法分析工作可以是独立的一遍,把字符流的源程序变为单词序列, 输出在一个中间文件上, 这个文件做为语法分析程序的输入而继续编译过程。 然而, 更一般的情况, 常将词法分析程序设计成一个子程序, 每当语法分析程序需

3、要一个单词时, 则调用该子程序。 词法分析程序每得到一次调用, 便从源程序文件中读入一些字符, 直到识别出一个单词, 或说直到下一个单词的第一个字符为止。四 、模块设计下面是程序的流程图五、程序介绍在程序当前目录里建立一个文本文档,取名为 ,所有需要分析的程序都写在此文 本文档里,程序的结尾必须以“”标志符结束。程序结果输出在同一个目录下, 文件名为,此文件为自动生成。本程序所输出的单词符号采用以下二元式表示:(单词种别,单词自身的值)如程序输出结果 (57,"#")(33,"include")(52,"<")(33,"

4、;iostream")等。程序的功能:(1)能识别C语言中所有关键字(共32个)(单词种别分别为1 32 ,详情见程序代码相关部分,下同)(2)能识别C语言中自定义的标示符(单词种别为33)能识别C语言中的常数(单词种别为0)能识别C语言中几乎所有运算符(单词种别分别为 41 54)(5)能识别C语言中绝大多数界符(单词种别分别为55 66)六、运行结果输入文件运行结果(输出文件)七、设计体会八、附录部分(程序代码)单词符号类别编码单词符号类别编码单词符号类别 编码单词符 号类别编 码if3float21+31#62then4short22-32.63else5unsigned23*

5、33,64while6continue24/3465do7for25<35>=39begin8signed26>36<=38end9void27=37=41long10default28:=51!=42switch11goto29(52%40case12sizeof30)53标识符1enum13volatile43;54常数2register14auto4455typedef15double4556char16int46(57extern17struct47)58return18break48<<59union19static49>>60cons

6、t2061提示:文件的打开和读写函数:file *fp,*out; =0) fprintf(oufile,"(64,.)n");else if(strcmp(p,"*")=0) else if(strcmp(p,"/")=0) else if(strcmp(p,"%")=0) else if(strcmp(p,",")=0) else if(strcmp(p,":")=0) else if(strcmp(p,"")=0) else if(strcmp(p,

7、">")=0)else if(strcmp(p,"<")=0)fprintf(ou情le,"(33,*)n");fprintf(outfile,"(34,/)n");fprintf(outfile,"(40,%)n");fprintf(outfile,"(64,)n");fprintf(outfile,"(65,:)n");fprintf(outfile,"(54,;)n"); fprintf(outfile,"(

8、36,>)n"); fprintf(ou情le,"(35,<)n");else if(strcmp(p,">=")=0) fprintf(outfile,"(39,>=)n");else if(strcmp(p,"<=")=0) fprintf(outfile,"(38,<=)n");else if(strcmp(p,"=")=0) fprintf(outfile,"(41,=)n");else if(strc

9、mp(p,"!=")=0) fprintf(outfile,"(42,!=)n");else if(strcmp(p," ")=0) ;else if(strcmp(p,"n")=0) ;else fprintf(outfile,"%s 未定义 n",p);void main()FILE *fp,*out;int i=0,x=0,y=0;int EA=0;char ch,str10000,idstr10,systr2;if(fp=fopen("","r")

10、=NULL)printf("Can not open infile!n");exit(0);if(out=fopen("","w")=NULL)printf("Can not open outfile!n");exit(0);ch=fgetc(fp);while(ch!=EOF)stri=ch;stri+1='0'i+;ch=fgetc(fp);i=0;while(1)if(stri='') break;elseif(stri>='a'&&str

11、i<='z')|(stri>='A'&&stri<='Z')| (stri>='0'&&stri<='9')|(stri='_')idstrx=stri;idstrx+1='0'x+;i+;EA=1;elsex=0;if(strlen(idstr)!=0)&&(EA) analzid(out,idstr);idstrx='0'if(stri<'0'|(stri>&

12、#39;9'&&stri<'A')|(stri>'Z'&&stri<'a')|stri>'z')if(stri!='!'&&stri!='='&&stri!='<'&&stri!='>')systry=stri;systry+1='0'analzsy(out,systr);i+;elseif(stri='!'&&stri+1='=')|(stri='='&&stri+1='=')| (stri='>'&&stri+1='=')|(stri='<'&&stri+1='=')| (stri='<'&&stri+1='<')|(stri='>'&&stri+1='>') (systry=stri

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论