flex_bison
flex_bison

flex
- flex词法分析器,可以利用正则表达式来生成匹配相应字符串的C语言代码,其语法格式基本同Lex相同。单词的描述称为模式(Lexical Pattern),模式一般用正规表达式进行精确描述。FLEX通过读取一个有规定格式的文本文件,输出一个C语言源程序。
- FLEX的输入文件称为LEX源文件,它内含正规表达式和对相应模式处理的C语言代码。LEX源文件的扩展名习惯上用.l表示。FLEX通过对源文件的扫描自动生成相应的词法分析函数int yylex(),并将之输出到名规定为lex.yy.c的文件中。实用时,可将其改名为lexyy.c。
- fex的输入是文件由3部分组成:definetion %% rules %% code 使用%%分隔
定义: definition
%{
%}
%%
规则: rules
%%
用户代码:code
- definetion的工作是定义变量声明及预编译宏定义等
%{
int a;
int b;
%}
- 输入中的信息以正则表达式和C代码的形式组成,这些形式被称为规则rules,使用的是python正则表达
- code用户代码,支持c/c++
bison
- rules正则原子
python正则表达全原子操作
- 字符类

- 特殊字符类

- 重复匹配

- 非贪婪重复

- 圆括号分组

- 反向引用

- 锚点

- 带括号特殊语法

- 字符类
正则表达式的常用操作符
操作符 说明 实例 . 表示任何单个字符 [] 字符集,对单个字符给出取值范围 [abc]表示a,b,c,[a-z]表示a到z单个字符 [^] 非字符集,对单个字符给出排除范围 [^abc]表示非a或b或c的单个字符 * 前一个字符0次或无限次扩展 abc* 表示ab,abc,abcc,abccc等 + 前一个字符1次或无限次扩展 abc+ 表示abc,abcc,abccc等 ? 前一个字符0次或1次扩展 abc?表示ab,abc | 左右表达式任何一个 abc|def表示abc、def 更多操作 操作符 实例 扩展前一个字符m次 ab{2}c 表示abbc 扩展前一个字符m至n次(含n) ab{1,2}c 表示abc,abbc ^ 匹配字符串的开头 ^abc 表示 abc且在一个字符串的开头 $ 匹配字符串结尾 abc$ 表示abc且在一个字符串的结尾 () 分组标记,内部智能使用 | 操作符 (abc) 表示abc, (abc|def)表示abc,def \d 数字,等价于[0-9] \w 单词字符,等价于[A-Za-z0-9_] 字符 描述 \cx 匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。 \f 匹配一个换页符。等价于 \x0c 和 \cL。 \n 匹配一个换行符。等价于 \x0a 和 \cJ。 \r 匹配一个回车符。等价于 \x0d 和 \cM。 \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意 Unicode 正则表达式会匹配全角空格符。 \S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 \t 匹配一个制表符。等价于 \x09 和 \cI。 \v 匹配一个垂直制表符。等价于 \x0b 和 \cK。 经典正则表达式举例
--- --- ^[A-Za-z]+$ 由26个字母组成的字符串 ^[A-Za-z0-9]+$ 由26个字母和数字组成的字符串 ^-?\d+$ 整数形式的字符串 ^[1-9][1-9][0-9]$ 正整数星时代娿字符串 [1-9]\d 中国境内邮政编码,6位 [\u4e00-\u9fa5] 匹配中文字符 \d{3}-\d{8}|d{4}-\d 国内电话号码,010-68913536
flex_bison的更多相关文章
- MRuby 编译笔记
专注于嵌入式脚本的MRuby在Windows下的编译笔记: 环境: OS: Windows 8.1, 使用 VS Express 2013 for Desktop. 材料: MRuby : 下载源码就 ...
- Windows上编译OpenShadingLanguage
将OSL 1.3.0解压到[工作目录]/osl/OpenShadingLanguage 对Debug使用如下bat生成项目文件: @Echo off cd OpenShadingLanguage se ...
- Flex & Bison 开始
Flex 与 Bison 是为编译器和解释器的编程人员特别设计的工具: Flex 用于词法分析(lexical analysis,或称 scanning),把输入分割成一个个有意义的词块,称为记号(t ...
随机推荐
- 1.31 wlx 魔怔 9 解法交互题小结
参考题解地址 1. 从树上任意一个节点开始,跳到其随机一个后代,跳到叶子的期望次数为 \(H_{siz_u}=\ln(siz_u)\). 证明: 首先考虑一条链的情况.设在第 \(i\) 个点期望次数 ...
- DaemonSet方式部署nginx-ingress
前言 nginx-ingress是k8s官方维护的一个Ingress Controller,具体使用,官方有详细的文档:https://kubernetes.github.io/ingress-ngi ...
- JavaScript五花八门的跳转方式
我们最常见的跳转方式是location.href = "http://www.baidu.com", 这种是最常见的,但是常常使用location.replace,location ...
- 【Oculus Interaction SDK】(九)使用控制器时显示手的模型
前言 这篇文章是[Oculus Interaction SDK]系列的一部分,如果发现有对不上的对方,可以回去翻看我之前发布的文章,或在评论区留言.如果文章的内容已经不适用于新版本了,也可以直接联系我 ...
- P25_wxss - rpx单位
模板样式 - rpx 什么是 rpx 尺寸单位 rpx(responsive pixel)是微信小程序独有的,用来解决屏适配的尺寸单位. rpx 的实现原理 rpx 的实现原理非常简单:鉴于不同设备屏 ...
- ‘mongo‘不是内部或外部命令,也不是可运行的程序或批处理文件
出现问题原因: MongoDB环境变量未配置 解决办法: 1)右击我的电脑-->属性,进入系统属性界面,点击如下图所示位置的[高级系统设置],在弹窗的[系统属性]的[高级]选项卡右下角点击[环境 ...
- nuxt+vant+rem项目构建
原文链接:https://blog.csdn.net/Young_Gao/article/details/93605428 一.创建项目 1.使用如下命令生成项目 vue init nuxt-comm ...
- jupyter环境搭建
前言 jupyter,一个交互式的笔记本,进行数据分析时比pycharm要好用和专业一些. jupyter安装的正确姿势 在别的教程里,他们讲的是通过pip install jupyter或者brew ...
- Winform 程序多开
在使用应用程序的过程中,经常要求应用程序只能运行一次.如果发现重复开启,应从系统进程列表中搜索到已经开启的进程,并将该进程窗口移到最前端显示. 记录一下过程. 实现过程 在 Program.cs 文件 ...
- LG P6156 简单题
\(\text{Problem}\) \(\text{Analysis}\) 显然 \(f=\mu^2\) 那么 \[\begin{aligned} \sum_{i=1}^n \sum_{j=1}^n ...