- 1、本文档共18页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
flex和bison笔记
flex和bison笔记
FLEX
什么是FLEX?它是一个自动化工具,可以按照定义好的规则自动生成一个C函数yylex(),也成为扫描 (Scanner )。这个C函数把文本
串作为输入,按照定义好的规则分析文本串中的字符,找到符合规则的一些字符序列后,就执行在规则中定义好的动作 (Action)。例如
在规则中可以这样定义:如果遇到一个换行字符\n,那么就把行计数 的值加一。
Flex文件就是一个文本文件,内容包括定义好的一系列词法规则。文件的命名习惯上以小写字母l(L)来作为文件后缀。如果为了清晰,也可
以用.flx或者.flex作为文件的后缀名。Flex文件完成后,就执行下列命令:
$ flex example.flex
这个命令执行后将生成一个C文件,默认文件名为lex.yy.c。这个C文件主要内容就是函数yylex()的定义。
如果要直接将这个文件编译成为一个可执行程序,还有一些要注意的地方。如果在Flex文件中没有提供main()函数的定义,那么这个C文
件中不会有main()函数。此时单独编译这个C文件的时候,一定要加上-lfl的连接库参数;若提供了main()函数,就不必要提供这个连接库
参数了。连接库libfl提供了一个缺省的main函数。缺省的main()函数中只是简单地调用yyflex()函数,而自己提供的main()函数则可以根据
需要加入许多其他的处理代码。
Flex文文件件
词法规范定义文件给出了单词构成规则。词法文件在习惯上用字母l(即L的小写)来作为后缀。Flex文件由三个部分组成。或者说三个段。三
个段之间用两个%%分隔。
定义段(definition )
%%
规则段(rule )
%%
用户代码段(u er code)
定定义义段段(definitions section)
定义段包含着一些简单名字的定义(name definition ),旨在简化扫描 的规范。定义名字的方法如下:
name definition
名字可以由字母或下划线开头,后跟零个或多个字母、数字、下划线、或短横线。名字的定义则从其后的第一个非空白字符(non-white-
pace)开始直到行尾。下面是一个例子,定义了一个名字DIGIT ,其定义就是指一个数字,如下所示:
DIGIT [0-9]
当在后面引用这个名字时,用一对花括号({})括住该名字即可。它会被展开成一对圆括号括住的该名字的定义,即:
{name} 展开成 (definition)
例如:
{DIGIT}+.{DIGIT}*
就等价于:
([0-9])+.([0-9])*
定义段中还可以加入启动条件( tart condition )的声明。顾名思义,启动条件就如同C语言中的条件编译一样,根据指定的启动条件去激活
一条规则,并用这条规则去匹配读入的字符。关于启动条件,后面还有更详细的介绍。
规规则则段段(rules section)
规则由模模式式(pattern)和动动作作(action)两个部分组成。模模式式就是一个正则表达式,FLEX加入了一些自己的扩展。而动动作作一般就是一些C语
句。模式指出了一个单词是如何构成的,当分析出一个符合该规则的单词时,就执行相应的动作。
模式一定要位于一行的开头处,不能有缩进。而动作的开头一定要与模式在同一行。当动作是用一对花括号{}括起来时,可以将左花括号
放在与规则相同的行,而其余部分则可以从下一行开始。
用用户户代代码码段段(user code)
所有用户代码都被原样拷贝到文件lex.yy.c中。在这里可以定义一些辅助函数或代码,供扫描 yylex()调用,或者调用扫描 (一般来说就
是main()了)。这一部分是可有可无的。如果没有的话,Flex文件中第二个%%是可以省略的。
在定义段或者规则段中,任何一行有缩缩进进的的文文本本或者包含在在一一对对%{和和%}之之间间的的文文本本,都被原样拷贝到最后生成的C代码文件中 (当然%
{和%}会被移走)。在书写时%{和%}都必须在一行的开始处,不能缩进。
在规则段中,第一条规则之前的任何未缩进的文本或者在%{和%}之间的文本,可以用来为扫描 声明一些本地变量和代码。一旦进入扫
描 的代码,这些代码就会被执行。规则段内其他的缩进的文本或者%{和%}之间的文本还是被原样拷贝输出,但是他们的含义是尚未有
明确定义,很可能引起编译时 (compile-time )错误 (这一特性是为了与POSIX兼容而提供的)。
在定义段中,没有缩进的注释也会被原样拷贝到最后生成的C代码文件
您可能关注的文档
- F701-S 中文版.pdf
- FANUCLADDER3V5.7使用说明书.pdf
- FANUC外部轴添加手册(弧焊篇).pdf
- FANUC系统在大型机床中的应用.pdf
- FC500培训手册-final.pdf
- Fatigue教程.pdf
- FC51快速指南.pdf
- FC2000IAH历史数据采集系统使用说明.pdf
- FDCDQ4_06_02-断路器和隔离开关的原理与选择.pdf
- FCoE技术交流(2012-05-10).pdf
- 2024年举办篮球比赛活动方案范文(二篇) .pdf
- 2024年中级经济师-农业经济专业知识与实务考试历年真题摘选附带答案完整版.pdf
- 2024年PC项目合作计划书 .pdf
- 2024年二级建造师-矿业工程管理与实务考试历年真题摘选附带答案版.pdf
- 2024年中级会计实务考试必威体育精装版测试题与答案 .pdf
- 2024年一级造价师之工程造价案例分析(土建+安装)押题练习试卷A卷附答案.pdf
- 2024年【机械员-岗位技能(机械员)】考试及答案 .pdf
- 2024年三支一扶之三支一扶申论综合练习试卷B卷附答案 .pdf
- 2024年中级注册安全工程师之安全生产管理基础试题库和答案要点.pdf
- 2024年《10以内的加减法》幼儿园大班数学教案(精选 .pdf
文档评论(0)