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语言类似,唯一需要注意的是,最好在/*的前面加上几个空格,并且都是在单独一行里面。