flex 手册摘要
个人学习
摘抄翻译
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 手册摘要的更多相关文章
- C 标准库函数手册摘要
<stdlib.h> int abs( int value ); long int labs( long int value ); 返回参数的绝对值 int rand( void ); v ...
- 阿里巴巴Java开发手册摘要(二)
MySql数据库 一建表规约 1.表达是与否概念的字段,必须使用is_xxx的命名方式,数据类型是unsigned tinyint(1:是,0否) 正例:表达逻辑删除的字段名is_deleted,1表 ...
- 阿里巴巴Java开发手册摘要(一)
一命名风格 1.代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结尾. 反例:_name / $name / name_ / name$ 2.类名使用UpperCamelCase风格 ...
- RichEdit控件 SDK 参考手册
RichEdit控件 SDK 参考手册 摘要: 本文对Rich Edit控件底层消息机制进行了讲解,以期读者对Windows平台下的Rich Edit控件有一个更深入的认识,同时对于使用Win32 S ...
- 微信小程序内测申请
想申请微信小程序的内测?别做梦了! 小程序内测是邀请制的,目前就发放了200个内测邀请.正因为稀缺,江湖传言内测资格已经炒到300万(一套房)一个了 但是!!!!你可以先熟悉一下相关资料和文档,下载一 ...
- Yacc 与 Lex 快速入门
Yacc 与 Lex 快速入门 Lex 与 Yacc 介绍 Lex 和 Yacc 是 UNIX 两个非常重要的.功能强大的工具.事实上,如果你熟练掌握 Lex 和 Yacc 的话,它们的强大功能使创建 ...
- snort-2.9.7.0源码安装过程
2015/02/15,centos6.5-64-minimal,初始205个包 [root@localhost snort]# yum install wget[root@localhost snor ...
- NBearV3中文教程总目录
1.NBearV3 Step by Step教程——ORM篇 摘要:本教程演示如何基于NBearV3的ORM模块开发一个Web应用程序的全过程.本教程演示的实体关系包括:继承.1对1关联.1对多关联, ...
- OpenID说明
OpenID使用手册 摘要: OpenID是一种开放.离散式的用于用户数字标识的开源框架.在网络应用日益充斥的今天,作为终端用户的我们不得不在每个网站上设置帐号,并管理众多的帐号.而采用OpenID技 ...
随机推荐
- HDU-1423-Greatest Common Increasing Subsequence-最长公共上升子序列【模版】
This is a problem from ZOJ 2432.To make it easyer,you just need output the length of the subsequence ...
- <每日一题>题目3:编写装饰器,为多个函数加上记录调用功能,要求每次调用函数都将被调用的函数名称写入文件
def log(func): def inner(*args,**kwargs): with open('log',mode='a',encoding='utf-8') as f: #以追加的方式打开 ...
- nodejs的安装和环境配置
在安装npm的时候可能会报错, 可以按准过cnpm时淘宝在国内的npm镜像 命令如下:npm install -g cnpm --registry=https://registry.npm.taoba ...
- vue_cli 安装
1.安装node 2.cmd node-v3.如果是刚刚安装输入 node-v 会成功出现版本 如果不是全局安装 过段时间输入 node-v会出现 'node' 不是内部或外部命令,也不是可运行的程序 ...
- shell学习笔记1: shell 中的变量与常见符号使用方法
变量 声明即用 a=2 b="123" 调用 ${varName}或者 $varName echo $b echo ${a} 常见变量 $?:判断上一个语句是否成功 $0:执行脚本 ...
- Vue-element 的 resetFields of undefined报错
触发场景:添加表单弹框,当我信息保存成功后会报 [Vue warn]: Error in event handler for "click": "TypeError: C ...
- Linux 启动出现 busybox vx.x.xx built-in shell 的问题
可能是磁盘检测错误,尤其出现在未安全关机或者磁盘损坏之后. 解决办法: 1.在选择启动项目时,选中第一项,如: ubuntu 8.04kernl.2.6.22-16-generic 2.按E 进入编辑 ...
- Bash Specially-crafted Environment Variables Code Injection Vulnerability Analysis
http://www.cnblogs.com/LittleHann/p/3992778.html
- PAT甲级——A1092 To Buy or Not to Buy【20】
Eva would like to make a string of beads with her favorite colors so she went to a small shop to buy ...
- IDEA中log4j 无法输出到本地,properties配置无效问题。
log4j添加以后无法输出日志信息,经检查(按以下顺序): 1.jar包导入正常 2.log4j.properties配置文件正常 3.logger.info可以输出,但是properties文件无效 ...