词法分析程序的实现代码以和分析.docVIP

  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文档。上传文档
查看更多
词法分析程序的实现代码以和分析.doc

实验一 词法分析程序的实现 一、 掌握程序设计语言的词法分析程序的手工实现方法。 二、 构造miniC语言的词法分析程序,程序要求能对输入的字符串流进行词法分析,并输出相应的单词。miniC语言的单词包括整数、标识符、分隔符、运算符和关键字,编制相应的词法分析程序。 三、 1. 标识符 ID = letter (letter|digit)* letter = a | .. | z | A | .. | Z digit = 0 | .. | 9 十进制整数 0 | (1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)* 运算符 + - * / = == = != = 分隔符 ( ) { } [ ];, 关键字 if else return int void while main 2. 单词的分类 可将所有标识符归为一类;将整数归为一类(或者每种进制的整数各为一类);运算符、关键字和分隔符则可采取一词一类。 3. 建立符号表 可事先建立一关键字表,以备在识别关键字时进行查询。变量名表及常数表则在词法分析过程中建立。 4. 程序的输出形式 所输出的每一单词,均按形如(TOKEN,VALUE)的二元式编码。对于变量标识符和常数,TOKEN字段为相应的类别码,VALUE字段则是该标识符、常数在其对应符号表中登记项的序号。 或者采用三元式(TYPE, TOKEN,VALUE),如下表: 5. int scan( ),完成以下功能: 1) )A:先写出各类单词的识别功能,即能对给定的单词识别出是不是标识符,关键字等。 B:之后把所有识别功能连接起来,能识别给出的字符串是哪个,打印提示(按二元式或三元式) C:从文件里读取字符串功能。识别出文件里所有单词类型,暂不考虑出错情况。 D:设计符号表的数据结构,把识别到的标识符加入到符号表中。 6.给出一个测试程序,调用函数scan( ),输出单词种别和属性。比如测试程序如下: void main() { int a, b; b =a*2; } 四、 1) 词法的正规式描述 2) 画出状态转换图 3)单词定义说明) 词法分析程序使用的数据结构和主要算法说明。 5)测试程序及其词法分析结果的显示。 #includestdio.h #includestring.h #includeiostream.h char prog[80],token[8]; char ch; int syn,p,m=0,n,row,sum=0; char *rwtab[6]={begin,if,then,while,do,end}; void scaner() { /* 共分为三大块,分别是标示符、数字、符号,对应下面的 if else if 和 else */ for(n=0;n8;n++) token[n]=NULL; ch=prog[p++]; while(ch== ) { ch=prog[p]; p++; } if((ch=ach=z)||(ch=Ach=Z)) //可能是标示符或者变量名 { m=0; while((ch=0ch=9)||(ch=ach=z)||(ch=Ach=Z)) { token[m++]=ch; ch=prog[p++]; } token[m++]=\0; p--; syn=10; for(n=0;n6;n++) //将识别出来的字符和已定义的标示符作比较, if(strcmp(token,rwtab[n])==0) { syn=n+1; break; } } else if((ch=0ch=9)) //数字 { { sum=0; while((ch=0ch=9)) { sum=sum*10+ch-0; ch=prog[p++]

文档评论(0)

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

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

1亿VIP精品文档

相关文档