0%

输入文件的格式

Flex输入文件的格式

flex的输入文件包含三个部分,使用%%来分隔,格式如下:

1
2
3
4
5
定义段
%%
规则段
%%
用户代码

定义段的格式

定义段的格式如下:

1
name definition

name 的定义跟C语言类似,由开头为字母或者下划线组成的。definition为从第一个为非空格的字符一直到行尾。定义可以后续使用{name}来代替,会自动展开为(definition)。例如

1
2
DIGIT    [0-9]
ID [a-z][a-z0-9]*

DIGIT为匹配一个数字的正则表达式,ID为一个第一个为字符,后面跟着零个或者多个的数字字符。

1
{DIGIT}+"."{DIGIT}*

可以展开为:

1
([0-9])+"."([0-9])*

可以认为是浮点数的表达式。

在符号%{%}之间的部分都会被原版拷贝到输出,不过需要注意的是%{%}字符必须 顶格写

另外一个比较有用的为%top,使用方法与%{%} 使用类似。

这个字段的作用为,内部含的内容全部出现在生成文件的最开始,这对于定义一些宏或者写一些提示信息是比较有用的。

比如可以写些如下的内容:

1
2
3
4
5
6
7
8
9
10
11
12
%top{
/*
* Author : Guo Shaoguang
* Email : sgguo@shao.ac.cn
* Date : 201010
* Version : v1.0
* Name : heal the world
*
* Copyright (c) 2010-2016, SHAO
* All rights reserved.

}

%top字段可以写多个,顺序就按照书写的顺序。

规则段的格式

规则段的格式为:

1
pattern action

需要注意的是pattern必须顶格写。

用户代码的格式

用户代码被原版照搬到lex.yy.c文件中,可以省略不写。

如何写注释

注释的写法与C语言类似,唯一需要注意的是,最好在/*的前面加上几个空格,并且都是在单独一行里面。

处无为之事,行不言之教;作而弗始,生而弗有,为而弗恃,功成不居!

欢迎关注我的其它发布渠道