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正则原子
  1. python正则表达全原子操作

    • 字符类

    • 特殊字符类

    • 重复匹配

    • 非贪婪重复

    • 圆括号分组

    • 反向引用

    • 锚点

    • 带括号特殊语法

  2. 正则表达式的常用操作符

    操作符 说明 实例
    . 表示任何单个字符
    [] 字符集,对单个字符给出取值范围 [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。
  3. 经典正则表达式举例

    --- ---
    ^[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的更多相关文章

  1. MRuby 编译笔记

    专注于嵌入式脚本的MRuby在Windows下的编译笔记: 环境: OS: Windows 8.1, 使用 VS Express 2013 for Desktop. 材料: MRuby : 下载源码就 ...

  2. Windows上编译OpenShadingLanguage

    将OSL 1.3.0解压到[工作目录]/osl/OpenShadingLanguage 对Debug使用如下bat生成项目文件: @Echo off cd OpenShadingLanguage se ...

  3. Flex & Bison 开始

    Flex 与 Bison 是为编译器和解释器的编程人员特别设计的工具: Flex 用于词法分析(lexical analysis,或称 scanning),把输入分割成一个个有意义的词块,称为记号(t ...

随机推荐

  1. Java 进阶P-1.3+P-1.4

    成员变量和成员函数 成员变量 类定义了对象中所具有的变量,这些变量称作成员变量 每个对象都有自己的变量,和同一个类的其他对象是分开的 成员方法 在 Java 语言中使用成员方法对应于类对象的行为.以 ...

  2. C#如何提高代码质量(一)

    代码部分 1.正确操作字符串 尽量少装箱 String str1 = "str2"+9.ToString(); 避免分配额外的内存空间 StringBuilder 2.使用默认转型 ...

  3. elasticsearch中使用bucket script进行聚合

    目录 1.背景 2.需求 3.准备数据 3.1 mapping 3.2 插入数据 4.bucket_script聚合的语法 5.聚合 5.1 根据月份分组排序 5.2 统计每个月卖了多少辆车 5.3 ...

  4. 新版Bing 搜索后台的.NET 技术栈

    微软在今天在Redmond 线下举办媒体一场活动,发布了新版的微软必应,在桌面上推出了测试版,移动版也即将推出.微软首席执行官纳德拉称Al-powered搜索为公司自云15年以来最大的事情. 2023 ...

  5. Grafana 系列文章(十一):Loki 中的标签如何使日志查询更快更方便

    ️URL: https://grafana.com/blog/2020/04/21/how-labels-in-loki-can-make-log-queries-faster-and-easier/ ...

  6. 20个 Git 命令玩转版本控制

    想要在团队中处理代码时有效协作并跟踪更改,版本控制发挥着至关重要的作用.Git 是一个版本控制系统,可以帮助开发人员跟踪修订.识别文件版本,并在必要的时候恢复旧版本.Git 对于有一定编程经验的用户来 ...

  7. Jetpack Compose学习(10)——使用Compose物料清单BOM,更好管理依赖版本

    原文地址:Jetpack Compose学习(10)--使用Compose物料清单BOM,更好管理依赖版本 - Stars-One的杂货小窝 本期讲解下关于Android推出的BOM来简化我们添加co ...

  8. C4模型,架构设计图的脚手架,你值得拥有

    hi,我是熵减,见字如面. 对于软件开发团队来说,写软件设计文档,花架构图,是日常工作中的关键一项. 而其中,如何画好系统设计的架构图呢? Simon Brown 就 提出 C4 模型,来解决这个问题 ...

  9. jenkins简单安装及配置(Windows环境

    jenkins简单安装及配置(Windows环境) jenkins是一款跨平台的持续集成和持续交付.基于Java开发的开源软件,提供任务构建.持续集成监控的功能,可以使开发测试人员更方便的构建软件项目 ...

  10. CF1367E Necklace Assembly

    题目传送门 思路 提供一种比现有的两篇题解都简单的方法. 我们枚举答案,发现最终的答案数组一定是由多个完全相同的块组成的,并且块长必定是 \(k\) 的因数. 然后我们考虑枚举答案 \(i\),那么此 ...