- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
?词法分析器报告
课程
编译原理
实验项目
词法分析器
专业年级
计科07级
姓名
李专
学号
0705010136
指导教师
实验时间
2010-6-18
实验成绩
一、任务与目的
·任务:
1、使用C/C++程序设计语言和递归下降子程序的方法编写该函数绘图语言的词法分析器。并要求设计一个词法分析器的测试小程序来调用自己编写的词法分析器测试各种不同的输入。
2、词法分析的任务是对输入的字符串形式的源程序按顺序进行扫描,在扫描的同时,根据源语言的词法规则识别具有独立意义的单词(符号),并产生与其等价的属性字流(内部编码)作为输出。通常属性字流即是对识别的单词给出的标记符号的集合。
·目的:
通过自己动手编写词法分析器,掌握记号、模式与单词,掌握正规式与正规集,掌握有限自动机,掌握如何从正规式到词法分析器的各种算法。理解如何理论联系实际以及明白理论与实际的差别。
二、分析与设计
???词法分析器的本质:基本任务是进行模式匹配,其关键在于分析过程中的模式说明和模式识别方法,在编译分析中即正规表达式和有限自动机。
构造词法分析器方法:1、手工构造;2、利用自动生成工具LEX。但是无论用那种方法,其内在工作原理都是相同的,都要经过正规式到最小状态DFA的转换。
词法分析器可有两种:一种是把词法分析器作为语法分析的一个子程序,一种是把词法分析器作为编译程序的独立一遍.在前一种情况下,词法分析器不断地被语法分析器调用,每调用一次词法分析器将从源程序的字符序列拼出一个单词,并将其Token值返回给语法分析器.后一种情况则不同,词法分析器不是被语法分析器不断地调用,而是一次扫描全部单词完成编译器的独立一遍任务。
词法分析程序一般具有如下功能:读入字符串形式的源程序;识别出具有独立意义的最小语法单位:单词。
???事实上,由正规表达式到最小化DFA的转换源程序中的测试生成串部分就是对所输入的单词进行判断,看其是否能被生成的DFA接受(也就是这个单词是否符合正规式定义的要求)。这本质上就是一个简单的词法分析。
定义某种语言的单词,并给出编号。该语言单词包括:保留字、运算符、标识符、常量、格式符等。根据给定的语言子集构造词法分析器。输出为中间文件。
在设计时为了便于理解,不使用内部编码而用枚举对同类型的单词进行标识。例如所有的常量统一用“CONST_ID”对其进行标识,当扫描时遇到常量就输出该常量的值和“CONST_ID”标识。
这里给出词法分析程序大概的设计方法:
???????????1、根据要求写出词法分析的正规文法G;
???????????2、根据正规文法G,写出正则式RE;
???????????3、根据正则式RE,画出NFA;
???????????4、将NFA转化为DFA;
???????????5、将DFA转化为mininumstateDFA;
???????????6、mininumstateDFA就是词法分析程序的流程图,根据此流程图编写相应的词????法分析程序。
以下是较为详细的设计:
①总体结构与模块划分
测试模块(scannermain.cpp)
词法分析器模块(scanner.hscanner.cpp)
②重要数据结构
·枚举记号种类
enumToken_Type{
????ORIGIN,SCALE,ROT,IS,TO,STEP,DRAW,FOR,FROM,??????????????????//保留字
????T,?????????????????????????????????????????????????????????????????//参数
????SEMICO,L_BRACKET,R_BRACKET,COMMA,????????????????????????????????//分隔符号
????PLUS,MINUS,MUL,DIV,POWER,??????????????????????????????????????//运算符
????FUNC,??????????????????????????????????????????????????????????????//函数
????CONST_ID,??????????????????????????????????????????????????????????//常数
????NONTOKEN,??????????????????????????????????????????????????????????//空记号
????ERRTOKEN???????????????????????
文档评论(0)