flex编写的正则表达式的代码如何书写,请从最基础的开始教我
时间: 2024-10-15 13:26:03 浏览: 1
Flex中使用的正则表达式语法叫做“Flex正规语法规则”或“Flex Token Patterns”,它允许你在.L文件中定义输入流的不同部分。下面是一些基本的规则:
1. **基础字符匹配**:
- 字母 `[abc]` 匹配单个字符 'a', 'b', 或 'c'
- 数字 `\d` 匹配任意数字(0-9)
- 特殊字符 `\t`, `\n` 分别匹配制表符和换行符
2. **范围字符**:
- `[A-Za-z0-9_]` 匹配字母、数字和下划线
- `[^chars]` 匹配不在括号内的任何字符
3. **贪婪与非贪婪**:
- 默认匹配尽可能长的字符串,例如 `[A-Z]*` 会匹配所有大写字母直到遇到空格。如果你想匹配到第一个就停止,可以添加 `?` 后缀,如 `[A-Z]?`
4. **重复次数**:
- `{n}`: 出现恰好n次
- `{n,}`: 出现至少n次
- `{n,m}`: 出现n到m次(包括n和m)
5. **组合和分组**:
- `(expression)` 创建一个组,可以提取出来作为单独的值
- `expression|expression` 或者 `expression / expression` 表示选择其中一种模式
6. **忽略字符**:
- `%ignore space;` 可以忽略指定的字符或字符集,不影响词法分析。
7. **返回标记**:
- `return <token_name>;` 当匹配到该模式时,将生成指定的标记。
```l
%%
[a-zA-Z_][a-zA-Z0-9_]* { yylval = strdup(yytext); return IDENTIFIER; }
\d+ { yylval = atoi(yytext); return NUMBER; }
\. { return DOT; }
[ \t\n\r\f\v] { /* ignore whitespace */ }
%%
```
这里是个简单的例子,定义了识别标识符、数字和点的规则。