- 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 基于Flex的词法分析器设计及实现1.1 需求分析1.1.1 问题定义通过对 flex 基本知识的阅读,了解其工作原理和过程以及其匹配模式和规则,掌握简单的 lex 语法和规则; 在上述基础上能够自主编写出简单且可以运行的词法分析器,实现简单的词法分析功能;通过实验,设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解,并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。1.1.2 功能描述本次编制调试的词法分析器基本可以实现如下简单功能: 可以匹配识别关键字:else if switch for int float return void while(所有的关键字都是保留字,并且必须是小写) ;可以匹配识别专用符号: + - * / = = == != = ; ,( ) [ ] { } /* */; 3、 标识符(ID) 和数字(NU )通过下列正则表达式定义: ID = letter letter* NUM = digit digit* letter = a|..|z|A|..|Z digit = 0|..|9;4、可以匹配识别空格(空格由空白、换行符和制表符组成,空格通常被忽略,除了它必须分开 ID、NUM 关键字); 5、可以识别简单的注释(/* 注释内容*/) ;1.1.3 开发环境及工具介绍1、Window环境下载Visual Studio之后,利用其命令提示窗口进行操作。下载并安装Flex。 2、vs2010的编译器cl.exe。3、flex:词法分析器? Flex是用来生成程序的工具,他们所生成的程序能够处理结构化输入,最初的Flex是用来生成编译器的,但是后来他们被证明在其他领域也非常有效。Flex是一个SourceForge项目。其依赖于GNU m4宏处理器。Linux和BSD都应该有m4,对于Windos用户来说,Flex被包含在Cygein Linux模拟环境中。什么是FLEX?它是一个自动化工具,可以按照定义好的规则自动生成一个C函数yylex(),也成为扫描器(Scanner)。这个C函数把文本串作为输入,按照定义好的规则分析文本串中的字符,找到符合规则的一些字符序列后,就执行在规则中定义好的动作(Action)。例如在规则中可以这样定义:如果遇到一个换行字符\n,那么就把行计数器的值加一。Flex文件就是一个文本文件,内容包括定义好的一系列词法规则。1.2 系统概要设计1.2.1 系统体系结构图1-1 体系结构图 图1-2 词法分析流程图1.2.2 系统模块划分Lex 工具是一种词法分析程序生成器,它可以根据词法规则说明书的要求来生成单词识别程序, 由该程序识别出输入文本中的各个单词。 一般可以分为定义部分规则部分 用户子程序部分。其中规则部分是必须的,定义和用户子程序部分是任选的。 定义部分:定义部分起始于 %{ 符号,终止于 %} 符号,其间可以是包括 include 语句、声明语句在内的 C 语句。这部分跟普通 C 程序开头没什么区别。 规则部分:规则部分起始于%%符号,终止于%%符号,其间则是词法规则。词 法规则由模式和动作两部分组成。模式部分可以由任意的正则表达式组成,动作部分是由 C 语言语句组成,这些语句用来对所匹配的模式进行相应处理。需要注意的是,lex 将识 别出来的单词存放在 yytext[]字符数据中, 因此该数组的内容就代表了所识别出来的单词 的内容。类似 yytext 这些预定义的变量函数会随着后面内容展开一一介绍。动作部分如 果有多行执行语句,也可以用{}括起来。 用户子程序部分:最后一个%%后面的内容是用户子程序部分,可以包含用 C 语言 编写的子程序,而这些子程序可以用在前面的动作中,这样就可以达到简化编程的目的。这里需要注意的是,当编译时不带-ll 选项时,是必须加入 main 函数和 yywrap(yywrap 将 下后面说明)。 Lex 其实就是词法分析器, 通过配置文件*.l,依据正则表达式逐字符去顺序解析文件, 并动态更新内存的数据解析状态。Lex 善长于模式匹配。词法分析的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。词法分析阶段是编译过程的第一个阶段,是编译的基础。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单 词符号或符号)。词法分析的核心任务是扫描、识别单词且对识别出的单词给出定性、定长的处理;实现词法分析程序的常用途径:自动生成, 手工生成。1.3 详细设计与实现1.3.1 Lex代码的设
文档评论(0)