个人学习
摘抄翻译
http://www.cs.princeton.edu/~appel/modern/c/software/flex/flex.html#SEC1

程序的格式

分成显示的三部分 由%%分割开来

definition section

rules section

正则模式

notes :
1
这里的正则模式不同于大多数正则规则
非匹配符^ 会匹配到 换行符
如果不想 [^abc] 匹配过一个整行的话

请使用 [^abc\n]

2
一个正则最多有一个 后缀内容 / or $

start codition ^ <> 只能会出现在模式的开头

并且以上四个 符号不不能呗 gourped 到一个括号里面去

^$不出现在正确的位置将被认为是一个普通的字符

以下两个例子是不合法的

foo/bar$ 出现了两个后缀内容
foobar

Start condition

有两种 Start condition
一种是 inclusive(%s) 一种是 exclusive (%x)

使用begin 之后就是 活跃的 同时其他的 start codition 变得不活跃

对于 inclusive 来说 没有start condition 的同样是活跃的
对于 exclusive 来说 只有这种start condition 是活跃的

<*> 匹配任意的 start condition

模式的默认行为 是 echo 任意没有被匹配上的字符 就等价于
<*>.|\n echo;

begin(0) 是回到最初没有任何规则是活跃者的时候
等价于 BEGIN(INITIL)

begin 语句也可以作为一段 Indent code 放在 rule section 的开头

接受所有的注释

要注意的是 start condition 是 int 所以可以用一个int 来保存相应的 数值

并且可以访问当前的 start condition 通过一个 叫做 YY_START 的宏
有一个 alias 叫做 YYSTATE (兼容 unix tool lex)

start condition scope

使得 start condiditon scope 写起来更为方便

start condition 是可以嵌套的
所以就有了 start condition stack , 我们可以手动操作这个栈

栈大小无限制 ,用完内存空间就会报错

使用栈, 需要包括 一个 前导 %option stack

# 多重输入缓冲 Multiple input buffers #

文件结束符 规则

特殊的字符 <> 指示了 当遇到文件结束符的 时候所要采取的特殊规则

当 匹配到 <> 的时候 并且 yywrap() 返回了一个非零的数(就是说 没有更多的文件需要处理了)

指定 yyin 为一个 新的输入文件(原来的版本还需要 进行特殊的行为 YY_NEW_FILE 现在不用了)

执行一个 return 语句

执行特殊 的yyterminate() action

或者切换到一个新的 buffer 使用 yy_switch _to_buffer ()

<> 匹配任何 start condition 中还没有 EOF的 start condition

特殊含义的宏

最新文章

  1. 转 Linux日志文件系统及性能分析
  2. 史上最全最强SpringMVC详细示例实战教程
  3. Yii2目录结构
  4. PHP框架学习错误总结
  5. Meta标签中的format-detection属性及含义
  6. Why Creating a Meaningful Morning Routine Will Make You More Successful
  7. leetcode distinct-subsequences(DP)
  8. c# winform 设置winform进入窗口后在文本框里的默认焦点
  9. 【HDOJ】4986 Little Pony and Alohomora Part I
  10. Android的目录结构说明
  11. OC 常用方法记录
  12. vue2.0transition过渡的使用介绍
  13. 2.BIND服务基础及域主服务器配置
  14. Android学习之——GridView
  15. [转]基于S2SH框架的项目—antlr-2.7.2.jar包冲突问题
  16. vscode主题配色
  17. 慕课网 Ajax笔记
  18. 【转】合格PHP工程师的知识结构
  19. 分频器VHDL描述
  20. 那些遇到的position-fixed无效事件

热门文章

  1. MDK 虚拟串口 *** error 30: undefined name of virtual register
  2. 求N!中素数的个数
  3. PAT甲级——A1131 Subway Map【30】
  4. 依赖注入(DI)
  5. Python第二课-输入输出
  6. git使用中的问题
  7. 大半宿,封装了一个MP3播放器的类,写了个简陋的播放器
  8. 机器学习-一对多(多分类)代码实现(matlab)
  9. 《你不知道的JavaScript》上卷——第1章
  10. springboot中pageHelper插件 list设置不进去 为null