Flex Manual基础笔记1

http://flex.sourceforge.net/manual/java

1. 介绍git

Flex是一个用于生成扫描器(scanners)的工具。输入是文件或标准输入,而后根据描述的规则,flex生成C源文件,其中定义函数yylex()。这个C文件就能被编译了,其就能做为一个扫描器使用的。正则表达式

2. 输入文件的格式函数

flex输入文件包含三个部分,经过一行只包含%%来分隔开,即:工具

definitions
%%
rules
%%
user code

(1) definition部分flex

主要包含是声明一个简单的name定义来简化扫描器说明,和声明一个start条件。.net

name定义有以下形式:code

name definitionget

其中name为一个以字母或下划线开头的单词,后面有零个或多个字母、数字、下划线或破折号。definition是从name以后的第一个非空字符开始直到这一行的结束。并且,definition能够在后面经过"{name}"引用,将会将其扩展为“(definition)"。it

举例:

digit [0-9]

id [a-z][a-z0-9]*

这样就分别定义了name="digit",其definition为"[0-9]和name="id",其definition为"[a-z][a-z0-9]*"。

那么后面能够经过引用digit的定义使用{digit}+"."{digit}*来表示([0-9])+"."([0-9])*的内容。

另外,没有缩进的注释(如/* */)会被直接复制到输出中。

一个缩进的文本或使用"%{"和"%}"包含的文本也会被复制到输出中(不包括"%{"和"%}"自己)。

另外,还有"%top"块,和上面的相似,可是其中的代码会被复制到输出的顶部,通常用于在里面定义一些头文件或宏等。容许多个%top块。如:

%top{

             /* This code goes at the "top" of the generated file. */

             #include <stdint.h>

             #include <inttypes.h>

         }

(2) rules部分

rules部分包含一系列形式的规则,其格式为:

pattern action

简单理解就是知足某一个模式,执行某一个行为,后面继续讨论其规则。其中pattern必须是没有缩进的,action必须在同一行。

在rules部分,任何缩进的或者被%{ %}包含的内容,若是出如今第一条rule以前,可能用于声明用于扫描时候的局部变量和进入扫描程序时候要执行的代码,若是出如今rule后面,那么这些内容会被直接复制到输出中,其行为多是未定义的,可能引起错误。

(3) user code部分 

user code部分会被简单的复制到输出文件lex.yy.c中。用于定义一些代码被扫描器使用。这部分是可选的,若是不须要这部分,那么第二个%%也不须要。

(4) 注释

Flex支持/**/的注释形式。flex遇到注释,就会将其原封不动的复制到输出文件中。注释能够在任何地方出现,除非:

1. 可能不能出如今rules部分,当flex须要一个正则表达式的时候(好比%%以后的一行就要求是正则表达式等)。

2. 可能不能出如今definiton部分的"%option"的行中。

总之,为了简单,尽可能全部的注释都在单独的一行开始而且在/*以前有一个以上空格,就不会有任何问题了。

相关文章
相关标签/搜索