编译原理词法分析器..docVIP

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理词法分析器.

编译原理大作业 词法分析器 班级:电计0902 学号:200981174 姓名:修德斌 一、实验目的 通过设计、调试词法分析程序,实现从源程序中分出 各种单词的方法;熟悉词法分析程序所用的工具自动机,进一步理解自动机理论。掌握文法转换成自动机的技术及有穷自动机实现的方法。确定词法分析器的输出形式及标识符与关键字的区分方法。加深对课堂教学的理解;提高词法分析方法的实践能力。通过本实验,应达到以下目标: 1、掌握从源程序文件中读取有效字符的方法和产生源程序的内部表示文件的方法。 掌握词法分析的实现方法。 上机调试编出的词法分析程序。 1、需求分析: 词法分析是编译程序的第一个阶段,主要任务是对于字符串流的输入,根据词表,将关键字、变量等转化成自定义逻辑结构,就是输入源程序,输出单词符号用于下一步的语法分析。{ int a; int b; { a=10; if (a0) then b=a a and b; } } 词法分析的功能就是输入源程序,输出单词符号去除空白符等无意义字符,然后对于像main、a、b这样的函数名、变量名字符串参考前后关键字,按照各自的分类,转换成一个变量表,对于像char = +这种关键字,按照关键词词表转化成对应的序号。Linenum: 行数 string= 具体的单词或者符号 类型(如分解符等) 最后在识别完成后列出了标示符的个数以及标示符的表示名称 关键字表: sting key[6] key[0]=”if” key[1]=”else” key[2]=”while” key[3]=”do” key[4]=”int” key[5]=”then” 分界符表: border[7]={ , , ; , { , } , ( , ) ,=} 算数运算符 arithmetic[6]={+ , - , * , / , ++ , --} 关系运算符 relation[6]={ , = , , = , == ,!=} 逻辑运算符 logicaloperator[2]={and,or} 标识符表 char *lableconst[80]; (2)、状态转换图: 根据对实验分析,对词法分析过程的剖析,画出其基本状态转换图如下; 3、详细设计: 1、字符串的输入采用文件方式,然后将文件中的数据读入数组lableconst中。 2、对标识符、逻辑运算符和关键字的判断 3、对数字,分界符等的识别 4、输出按照linenum 行数 具体输入词 类型 的形式输出 三、实验结果 输入源: { int a; int b; { a=10; if (a0) then b=a a and b; } } 程序运行以及输出结果: 四、讨论与分析 该词法分析器能够进行简单的词法分析,包括对关键字、分界符、算术运算符、关系运算符、标示符、逻辑运算符以及常数的识别,对不同类型的词归类,为下一步的语法分析做好铺垫,在处理常数时,先把常数转换为二进制,再存储在数组中。 但是仍有不足之处,各类型表囊括的项目部完全,还需进一步完善。 五、附录: (给出适当注释,可读性高) #include iostream #include ctype.h #include fstream #include string.h #include malloc.h using namespace std; ifstream fp(1.txt,ios::in); char cbuffer; char *key[6]={if,else,while,do,int,then}; //关键字 char *border[7]={ , , ; , { , } , ( , ) ,=}; //分界符 char *arithmetic[6]={+ , - , * , / , ++ , --}; //算数运算符 char *relation[6]={ , = , , = , == ,!=}; //关系运算符 char *logicaloperator[2]={and,or}; //逻辑运算符 char *lable

文档评论(0)

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

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

1亿VIP精品文档

相关文档