- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理课程设计-词法分析器(附含源代码)
编译原理-词法分析器的设计
?
设计说明及设计要求
一般来说,编译程序的整个过程可以划分为五个阶段:词法分析、语法分析、中间代码生成、优化和目标代码生成。本课程设计即为词法分析阶段。词法分析阶段是编译过程的第一个阶段。这个阶段的任务是从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词(也称单词符号或符号)。如保留字(关键字或基本字)、标志符、常数、算符和界符等等。
二. 设计中相关关键字说明
1.??????????? C语言中的 if , else , while , do ,for,case,break, return 等。
2.???????????
3.??????????? 12,6.88,和“ABC”等。
4.??????????? + ,- , * , / ,%, , ,= , = 等。
5.??????????? # ,〈〈 , 〉〉等。
?
三? 、程序分析
?
词法分析是编译的第一个阶段,它的主要任务是从左到右逐个字符地对源程序进行
扫描,产生一个个单词序列,用以语法分析。词法分析工作可以是独立的一遍,把字符流的源程序变为单词序列,输出在一个中间文件上,这个文件做为语法分析程序的输入而继续编译过程。然而,更一般的情况,常将词法分析程序设计成一个子程序,每当语法分析程序需要一个单词时,则调用该子程序。词法分析程序每得到一次调用,便从源程序文件中读入一些字符,直到识别出一个单词,或说直到下一个单词的第一个字符为止。
四 、模块设计
下面是程序的流程图
五?、 程序介绍
在程序当前目录里建立一个文本文档,取名为infile.txt,所有需要分析的程序都写在此文本文档里,程序的结尾必须以“@”标志符结束。程序结果输出在同一个目录下,文件名为outfile.txt,此文件为自动生成。本程序所输出的单词符号采用以下二元式表示:(单词种别,单词自身的值)如程序输出结果 (57,#)(33,include)(52,)(33,iostream) 等。
程序的功能:(1)??? 能识别C语言中所有关键字(共32个)(单词种别分别为1 — 32 ,详情见程序代码相关部分,下同)
(2)??? 能识别C语言中自定义的标示符 (单词种别为 33)
能识别C语言中的常数 (单词种别为0)
能识别C语言中几乎所有运算符(单词种别分别为41 — 54)
(5)??? 能识别C语言中绝大多数界符 (单词种别分别为 55 — 66)
六? 、运行结果
输入文件infile.txt
运行结果(输出文件 outfile.txt)
七?、 设计体会
八、附录部分(程序代码)
单词符号 类别编码 单词符号 类别编码 单词符号 类别编码 单词符号 类别编码 if 3 float 21 + 31 # 62 then 4 short 22 - 32 . 63 else 5 unsigned 23 * 33 , 64 while 6 continue 24 / 34 : 65 do 7 for 25 35 = 39 begin 8 signed 26 36 = 38 end 9 void 27 = 37 == 41 long 10 default 28 := 51 != 42 switch 11 goto 29 ( 52 % 40 case 12 sizeof 30 ) 53 标识符 1 enum 13 volatile 43 ; 54 常数 2 register 14 auto 44 [ 55 typedef 15 double 45 ] 56 char 16 int 46 { 57 extern 17 struct 47 } 58 return 18 break 48 59 union 19 static 49 60 const 20 “ 61
提示:文件的打开和读写函数:
FILE *fp,*out; //定义文件指针
fp=fopen(infile.txt,r))
如果打开文件infile.txt失败,则函数返回NULL,即fp=NULL,第二个参数“r”表示以只读方式打开,如果为”w”, 则以可写方式打开
调用fgetc(fp)这个函数一次从fp所指向的文件读取一个字符
char ch=fgetc(fp);
想文件写字符的函数为fprintf(FILE * fp,写进的内容)
比如下面的调用fprintf(outfile,abcd\n)是把字符串“abcd”写到文件outfile的末尾,并且在后面加上了一个换行标志
文件读写完成后要用函数fclose(fp)关闭。
源代码
#include stdio.h
文档评论(0)