欢迎来到天天文库
浏览记录
ID:44068043
大小:211.23 KB
页数:10页
时间:2019-10-18
《基于flex的词法分析器的设计和实现》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、课程设计1基于Flex的词法分析器设计及实现1.1需求分析1.1.1问题定义1、通过对flex基本知识的阅读,了解其工作原理和过程以及其匹配模式和规则,掌握简单的lex语法和规则;2、在上述基础上能够自主编写岀简单且可以运行的词法分析器,实现简单的词法分析功能;3、通过实验,设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解,并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。1.1.2功能描述本次编制调试的词法分析器基本可以实现如下简单功能:1、可以匹配识别关键字:elseifswitchforintfloatreturnvoid
2、wh订e(所有的关键字都是保留字,并且必须是小写);2、可以匹配识别专用符号:+-*/<<=>>===!==;,():]{}/**/;3、标识符(ID)和数字(NU)通过下列正则表达式定义:ID=letterletter*NUM二digitdigit*letter二a
3、..
4、z
5、A
6、..
7、Zdigit二01..
8、9;4、可以匹配识别空格(空格由空白、换行符和制表符组成,空格通常被忽略,除了它必须分开ID、NUM关键字);5、可以识别简单的注释(/*注释内容*/);1.1.3开发环境及工具介绍1、Window环境下载VisualStudio之后,利用其命令提示窗口进行
9、操作。下载并安装Flex。2、vs2010的编译器cl.cxco3、flex:词法分析器Flex是用来生成程序的工具,他们所生成的程序能够处理结构化输入,最初的Flex是用来牛成编译器的,但是后来他们被证明在其他领域也非常有效。Flex是一个SourceForge项目。其依赖于GNUm4宏处理器。Linux和BSD都应该有m4,对于Windos用户来说,Flex被包含在CygeinLinux模拟环境中。什么是FLEX?它是一个自动化工具,可以按照定义好的规则自动生成一个C函数yylexO,也成为扫描器(Scanner)。这个C函数把文本串作为输入,按照定义好的规则分
10、析文木串中的字符,找到符合规则的一些字符序列后,就执行在规则中定义好的动作(Action)o例如在规则中可以这样定义:如果遇到一个换行字符,那么就把行计数器的值加一。Flex文件就是一个文本文件,内容包括定义好的一系列词法规则。1.2系统概要设计1.2.1系统体系结构Flex源文件(.1)词法分析器的C语言源文件(.h)r1i•■J此法分析器的课执彳亍程序图1-1体系结构图开始结束是关键字或标识分析程序T否I常数分析程图1-2词法分析流程图1.2.2系统模块划分Lex工具是一种词法分析程序牛成器,它可以根据词法规则说明书的要求来生成单词识别程序,由该程序识别出输
11、入文本中的各个单词。一般可以分为〈定义部分X规则部分X用户子程序部分〉。其中规则部分是必须的,定义和用户子程序部分是任选的。(1)定义部分:定义部分起始于%{符号,终止于%}符号,其间可以是包括include语句、声明语句在内的C语句。这部分跟普通C程序开头没什么区别。(2)规则部分:规则部分起始于〃%%〃符号,终止于〃%%〃符号,其间则是词法规则。词法规则由模式和动作两部分组成。模式部分可以由任意的正则表达式组成,动作部分是由C语言语句组成,这些语句用来对所匹配的模式进行相应处理。需要注意的是,lex将识别出来的单词存放在yytext[]字符数据中,因此该数组的内
12、容就代表了所识别出来的单词的内容。类似yytext这些预定义的变量函数会随着后而内容展开一一介绍。动作部分如果有多行执行语句,也可以用{}括起来。(3)用户子程序部分:最后一个%%后面的内容是用户子程序部分,可以包含用C语言编写的子程序,而这些子程序可以用在前面的动作中,这样就可以达到简化编程的目的。这里需要注意的是,当编译时不带-11选项时,是必须加入main函数和yywrap(yywrap将下后面说明)。Lex其实就是词法分析器,通过配置文件*.1,依据正则表达式逐字符去顺序解析文件,并动态更新内存的数据解析状态。Lex善长于模式匹配。词法分析的基木任务是从字符
13、串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。词法分析阶段是编译过程的第一个阶段,是编译的基础。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。词法分析的核心任务是扫描、识别单词且对识别出的单词给出定性、定长的处理;实现词法分析程序的常用途径:自动生成,手工生成。13详细设计与实现1.3-1Lex代码的设计与实现lex源代码编写通过对flex的语法学习,掌握了编写的基木原则和步骤,因为实验要求编写一个简单地词法
此文档下载收益归作者所有