Flex输入文件的格式
flex的输入文件包含三个部分,使用%%来分隔,格式如下:
1 | 定义段 |
定义段的格式
定义段的格式如下:
1 | name definition |
name
的定义跟C
语言类似,由开头为字母或者下划线组成的。definition
为从第一个为非空格的字符一直到行尾。定义可以后续使用{name}
来代替,会自动展开为(definition)
。例如
1 | DIGIT [0-9] |
DIGIT
为匹配一个数字的正则表达式,ID
为一个第一个为字符,后面跟着零个或者多个的数字字符。
1 | {DIGIT}+"."{DIGIT}* |
可以展开为:
1 | ([0-9])+"."([0-9])* |
可以认为是浮点数的表达式。
在符号%{
和 %}
之间的部分都会被原版拷贝到输出,不过需要注意的是%{
和%}
字符必须 顶格写 。
另外一个比较有用的为%top
,使用方法与%{
… %}
使用类似。
这个字段的作用为,内部含的内容全部出现在生成文件的最开始,这对于定义一些宏或者写一些提示信息是比较有用的。
比如可以写些如下的内容:
1 | %top{ |
%top
字段可以写多个,顺序就按照书写的顺序。
规则段的格式
规则段的格式为:
1 | pattern action |
需要注意的是pattern
必须顶格写。
用户代码的格式
用户代码被原版照搬到lex.yy.c
文件中,可以省略不写。
如何写注释
注释的写法与C语言类似,唯一需要注意的是,最好在/*
的前面加上几个空格,并且都是在单独一行里面。