基于flex的词法分析器的设计和实现.docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《基于flex的词法分析器的设计和实现.docx》由会员分享,可在线阅读,更多相关《基于flex的词法分析器的设计和实现.docx(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流基于flex的词法分析器的设计和实现.精品文档.课程设计1 基于Flex的词法分析器设计及实现1.1 需求分析1.1.1 问题定义1、 通过对 flex 基本知识的阅读,了解其工作原理和过程以及其匹配模式和规则,掌握简单的 lex 语法和规则; 2、 在上述基础上能够自主编写出简单且可以运行的词法分析器,实现简单的词法分析功能;3、 通过实验,设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解,并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。1.1.2 功能描述本次编制调试的词法分析器基本可以实现如下简单
2、功能: 1、 可以匹配识别关键字:else if switch for int float return void while(所有的关键字都是保留字,并且必须是小写) ;2、 可以匹配识别专用符号: + - * / = = != = ; ,( ) /* */; 3、 标识符(ID) 和数字(NU )通过下列正则表达式定义: ID = letter letter* NUM = digit digit* letter = a|.|z|A|.|Z digit = 0|.|9;4、可以匹配识别空格(空格由空白、换行符和制表符组成,空格通常被忽略,除了它必须分开 ID、NUM 关键字); 5、可以识别
3、简单的注释(/* 注释内容*/) ;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?它是一个自动化工具,可以按照
4、定义好的规则自动生成一个C函数yylex(),也成为扫描器(Scanner)。这个C函数把文本串作为输入,按照定义好的规则分析文本串中的字符,找到符合规则的一些字符序列后,就执行在规则中定义好的动作(Action)。例如在规则中可以这样定义:如果遇到一个换行字符n,那么就把行计数器的值加一。Flex文件就是一个文本文件,内容包括定义好的一系列词法规则。1.2 系统概要设计1.2.1 系统体系结构 图1-1 体系结构图 图1-2 词法分析流程图1.2.2 系统模块划分Lex 工具是一种词法分析程序生成器,它可以根据词法规则说明书的要求来生成单词识别程序, 由该程序识别出输入文本中的各个单词。 一
5、般可以分为。其中规则部分是必须的,定义和用户子程序部分是任选的。 (1) 定义部分:定义部分起始于 % 符号,终止于 % 符号,其间可以是包括 include 语句、声明语句在内的 C 语句。这部分跟普通 C 程序开头没什么区别。 (2) 规则部分:规则部分起始于%符号,终止于%符号,其间则是词法规则。词 法规则由模式和动作两部分组成。模式部分可以由任意的正则表达式组成,动作部分是由 C 语言语句组成,这些语句用来对所匹配的模式进行相应处理。需要注意的是,lex 将识 别出来的单词存放在 yytext字符数据中, 因此该数组的内容就代表了所识别出来的单词 的内容。类似 yytext 这些预定义
6、的变量函数会随着后面内容展开一一介绍。动作部分如 果有多行执行语句,也可以用括起来。 (3) 用户子程序部分:最后一个%后面的内容是用户子程序部分,可以包含用 C 语言 编写的子程序,而这些子程序可以用在前面的动作中,这样就可以达到简化编程的目的。这里需要注意的是,当编译时不带-ll 选项时,是必须加入 main 函数和 yywrap(yywrap 将 下后面说明)。 Lex 其实就是词法分析器, 通过配置文件*.l,依据正则表达式逐字符去顺序解析文件, 并动态更新内存的数据解析状态。Lex 善长于模式匹配。词法分析的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根
7、据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。词法分析阶段是编译过程的第一个阶段,是编译的基础。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单 词符号或符号)。词法分析的核心任务是扫描、识别单词且对识别出的单词给出定性、定长的处理;实现词法分析程序的常用途径:自动生成, 手工生成。1.3 详细设计与实现1.3.1 Lex代码的设计与实现lex 源代码编写 通过对 flex 的语法学习,掌握了编写的基本原则和步骤,因为实验要求编写一个简 单地词法分析器,根据实验所要求实现检查分析的功能,实验代码较为简单,以下是自己
8、编写的实验代码:letter a-zA-Z_ 定义字母letter dight 0-9 定义数字dight ID letter(letter)* 定义单词ID由若干个字母组成 NUM dight(dight)* 定义数字串NUM由若干个数字组成 B letter(dight|letter)* 定义标识符B 由数字戒字母组成 int nchar, nword, nline; nchar 字符数 nword单词数 nline 行数int line=1; line 为当前行数 初始化为1 else|if|else if|switch|for|int|float|return|void|while n
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 flex 词法 分析器 设计 实现
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内