• flex 手册摘要


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

    程序的格式##

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

    definition section

    rules section

    正则模式##

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

    请使用 [^abc ]

    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 任意没有被匹配上的字符 就等价于
    <*>.| 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

    特殊含义的宏

  • 相关阅读:
    对C# .Net4.5异步机制测试
    权限系统设计
    C#基础知识
    eclipse+pyDev
    Ubuntu下使用sublime text进行py开发
    110_02 补充模块:BeatifulSoup模块
    034 如何判断一个对象是否是可调用对象
    037 简单计算器实现
    036 re模块的小练习
    035 用Python实现的二分查找算法(基于递归函数)
  • 原文地址:https://www.cnblogs.com/sfzyk/p/9367331.html
Copyright © 2020-2023  润新知