个人学习
摘抄翻译
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. Web开发-Servlet&HTTP&Request

    <!doctype html>02 - JavaEE - Servlet&HTTP&Request figure:first-child { margin-top: -20 ...

  2. JQ实现全选、全不选

    代码: <table class="table myTable table-hover"> <thead> <tr> <th> &l ...

  3. java.nio.file.FileSystemException: D:\kafka_2.12-2.1.0\kafka_2.12-2.1.0\logs\__consumer_offsets-30\00000000000000000000.timeindex.cleaned: 另一个程序正在使用此文件,进程无法访问。

    在启动kafka时候报错: java.nio.file.FileSystemException: D:\kafka_2.12-2.1.0\kafka_2.12-2.1.0\logs\__consume ...

  4. selenium基础(生成测试报告)

    测试报告 生成HTML测试报告 下载HTMLTestRunner.py包 下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html 下载后,把H ...

  5. java_Map集合

    import java.util.HashMap; public class MapTest { /** * 1.Map集合是双列几个,一个元素包含两个值(key,value) * 2.Map集合中的 ...

  6. LeetCode 237. 删除链表中的节点(Python3)

    题目: 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点. 现有一个链表 -- head = [4,5,1,9],它可以表示为: 示例 1: 输入: head ...

  7. Android开发 BottomNavigationView学习

    前言 注意这个里介绍的是AndroidX的com.google.android.material.bottomnavigation.BottomNavigationView xml布局中 <co ...

  8. TSP+期望——lightoj1287记忆化搜索,好题!

    感觉是很经典的题 记忆化时因为不好直接通过E判断某个状态是否已经求过,所以再加一个vis打标记即可 /*E[S][u]表示从u出发当前状态是S的期望*/ #include<bits/stdc++ ...

  9. Ubuntu clion下载及激活

    1.下载 方法:去官网下载clion  https://www.jetbrains.com/clion/download/#section=linux 或者使用我上传的百度网盘链接: https:// ...

  10. js算法之寻路

    A*寻路算法 算法流程说明: 说明:起始节点记作S,目标节点记作E,对于任意节点P,从S到当前节点P的总移动消耗记作GP,节点P到目标E的曼哈顿距离记作HP,从节点P到相邻节点N的移动消耗记作DPN, ...