个人学习
摘抄翻译
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

特殊含义的宏

flex 手册摘要的更多相关文章

  1. C 标准库函数手册摘要

    <stdlib.h> int abs( int value ); long int labs( long int value ); 返回参数的绝对值 int rand( void ); v ...

  2. 阿里巴巴Java开发手册摘要(二)

    MySql数据库 一建表规约 1.表达是与否概念的字段,必须使用is_xxx的命名方式,数据类型是unsigned tinyint(1:是,0否) 正例:表达逻辑删除的字段名is_deleted,1表 ...

  3. 阿里巴巴Java开发手册摘要(一)

    一命名风格 1.代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结尾. 反例:_name / $name / name_ / name$ 2.类名使用UpperCamelCase风格 ...

  4. RichEdit控件 SDK 参考手册

    RichEdit控件 SDK 参考手册 摘要: 本文对Rich Edit控件底层消息机制进行了讲解,以期读者对Windows平台下的Rich Edit控件有一个更深入的认识,同时对于使用Win32 S ...

  5. 微信小程序内测申请

    想申请微信小程序的内测?别做梦了! 小程序内测是邀请制的,目前就发放了200个内测邀请.正因为稀缺,江湖传言内测资格已经炒到300万(一套房)一个了 但是!!!!你可以先熟悉一下相关资料和文档,下载一 ...

  6. Yacc 与 Lex 快速入门

    Yacc 与 Lex 快速入门 Lex 与 Yacc 介绍 Lex 和 Yacc 是 UNIX 两个非常重要的.功能强大的工具.事实上,如果你熟练掌握 Lex 和 Yacc 的话,它们的强大功能使创建 ...

  7. snort-2.9.7.0源码安装过程

    2015/02/15,centos6.5-64-minimal,初始205个包 [root@localhost snort]# yum install wget[root@localhost snor ...

  8. NBearV3中文教程总目录

    1.NBearV3 Step by Step教程——ORM篇 摘要:本教程演示如何基于NBearV3的ORM模块开发一个Web应用程序的全过程.本教程演示的实体关系包括:继承.1对1关联.1对多关联, ...

  9. OpenID说明

    OpenID使用手册 摘要: OpenID是一种开放.离散式的用于用户数字标识的开源框架.在网络应用日益充斥的今天,作为终端用户的我们不得不在每个网站上设置帐号,并管理众多的帐号.而采用OpenID技 ...

随机推荐

  1. <Django> MVT三大块之view(视图)

    1.视图简介 作用:接受web请求,返回web响应 本质:一个函数,定义在views.py文件中(定义在其他地方也行,约定俗成) 流程:(如果匹配不到,报一个404错误)-----结果返回http r ...

  2. 【牛客Wannafly挑战赛12】小H和圣诞树

    题目 可以考虑边分治,对于某一种颜色,我们处理出分治边左右两边所有以这个颜色为端点的路径长度,之后随便拼一拼就好了 但是这样对于每一组询问都需要边分一遍,这样做复杂度是\(O(nm+n\log n)\ ...

  3. 重温robotframework--day1

    RF支持中文编码设置 1.python2.6  [PythonDir]\Lib\site-packages\robot\utils下的encoding.py文件中,在文件上点击右键,选择Edit wi ...

  4. CSDN的验证码,为什么要这样呢

    总是有连着的部分

  5. vue 返回上一页

    参考:https://www.cnblogs.com/chenguiya/p/9118265.html 注:需为history模式 方法一: @click="back" back( ...

  6. PCA降维的前世今生

    PCA降维的数学原理 PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分 ...

  7. 使用github作为远程仓库的常见git操作

    [git上传本地代码到github新建仓库]一.建立git本地仓库 1.在本地目标文件夹(Code)中执行命令: git init //初始化本地仓库二.将上传到github的项目文件添加到本地仓库中 ...

  8. 开机自动调用.bat文件且浏览器全屏展示

    1,将 .bat文件放入到以下路径中 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup 或 C:\Users\Administr ...

  9. 廖雪峰Java14Java操作XML和JSON-2JSON-1Json介绍

    JSON是一种类似JavaScript对象的数据表示格式 JavaScript Object Notation 去除了JavaScript的执行语句 仅保留数据 JSON格式: 仅保留UTF-8编码 ...

  10. C++ Builder 2007中应用数据库SQLite(转载)

    第一次使用SQLite数据库,而且BCB2007也不熟,这两者的结合那就更让我难受了.今天只是简单的在BCB中调用SQLite,就花了我一下午时间,这也足见本人知识的浅薄,另一方面也说明我对这二者确实 ...