编译原理词法分析器设计报告总结.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
课程设计1——词法分析器设计 一、概述 本词法分析器,是个人自己设计的一个简易的C语言词法分析器,只针对了 部分C语言的语法和词法要求,能满足类似以下程序的词法分析。 〃将要翻译的C语言程序 #include〈stdio. h #includestdlib. h #includetime? h int main() { int gg; int i; char ch; float cdg; cdg=100. 25; srand(time(O)); printf (before deal:,z); i=10-l; if (i3) printf (〃cc〃); el se ch=『; ch++; while (i=2) i++; for (gg=520;gg1000;gg++) printf (hello!); if(i==10) printf (,z \nofter:,z); else printf(〃\n%c〃); switch (edg) case 2596: printf(2596); break; case 100. 2596: printf (〃8888〃); break; return 0; } 在开始写词法分析器程序之前,先给每个标识符,常数、基本字、运算符、 界符一个种别码,其中标识符,常数各为一个种别码,而由于基本字,运算符,界 符的有限性,可以设计为一字一个种别码。最终种别码表如下图所示: C语言(部分)种别码表格如右表所示: 单词 种别 码 标识符 标识符 1 常数 常数 2 关键字 int 3 double 4 flaot 5 srand 6 time 7 for 8 rand 9 printf 10 return 11 if 12 main 13 switch 14 include 15 else 16 case 17 while 18 break 19 运算符 20 21 = 22 = 23 * 24 ++ 25 == 26 ■ 27 + 28 / 29 界符 ■ / 30 ? ? 31 [ 32 ] 33 // 34 ( 35 ) 36 { 37 } 38 # 39 / 40 (3) (1) 终态 (2) * 终悉 终态 运算符的状态转换图 初态 * 终态 * 终态 终态 二、词法分析器程序的主要函数 int isdelimiter(char d); 功能: 判断是否为界符。 int predeal(); 功能: 预处理子程序:过滤掉不必要的换行符号和空格符号(其中若空格前是界 符或者是空额,则可以过滤空格,否则不过滤),并且往缓冲区屮 输入size大小的字符串?有两个缓冲区bufferl和buffer2, 如果第一次填写,则先更新bufferl,否则buffer2总是最新更新的部分。 int ifrenew(char buffer[]); 功能: 判断是否需要更新缓冲区,如需要,则更新。 int iskeyword(char strToken[],int pr;int p); 功能: 判断strToken[]是否为关键字。 int ifhead(char strToken[]); 功能: 与头文件表比照,判断头文字名strToken[]是否合法 int dealinclude(); 功能: 预处理程序中的//include int addjdentifier(); 功能: 初次定义标识符时,添加标识符进标识符表。 int GetBC(int pr,int p); 功能: 读取下一个非空格字符。 int isoperator(int pr,int p); 功能: 判断是否为操作符 int isidentifier(int pr,int p); 功能: 判断是否为标识符。 int isnumber(int pr;int p); 功能: 判断是否为整数 三、本词法分析器主要的几个纠错功能的示范: :我的词法分析器有类似于预编译的功能,当代码里的头文件不包含在我设 定的头文件表里时,就会报错。效果如下图。 I F:\竭译 1§2\瀑程设计l\test\bin\Debug\test.exe 贋编译失敗:不存在头文件erro.h process returned 0 0x0 execution tine : 0.670 s Pre$s any key to continue. 问题代码如下图: program_test.txt - iSI本 工件9HBCV)MfttJCH)inin益X 1 r= p.xwhi 1 e program_test.txt - iSI本 工件9HBCV) MfttJCH) inin益 X 1 r= p.x whi 1 e )od r O1 ^0 (= ?…e r e ]t

文档评论(0)

ggkkppp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档