美文网首页
Flex & Bison 笔记

Flex & Bison 笔记

作者: longv2 | 来源:发表于2018-01-15 14:20 被阅读0次

lex 文件结构

lex 文件命名通常以 .l 结尾,共分为三个部分,由 %% 分割。

声明部分
%{
会被原封不动拷贝到生成的文件中
%}
选项设置及预定义一些常用的模式

%%
规则定义部分,一个规则包含一个模式和一个动作
REG {C 语言代码, return 一个 Token}
其中 reg 是正则表达式模式,每读取的字符匹配了一个模式,就执行规则 {}里面的动作代码,返回一个 TOKEN。其中模式必须出现在行首,如果有俩个模式匹配,则选取其中最长的,也就是最长匹配原则

规则定义部分,也可以包含一个 %{ C 代码 %} 块,其中的 C 代码会被执行一次,这通常可以用来返回一个 TOKEN,这个 TOKEN 会加在所有的 TOKEN 之前
%%
子例程,也就是 C 语言的 函数定义,会被拷贝到生成的此法额分析器 C 代码中

Flex

三层输入

  1. 默认使用标准输入或者yyin文件句柄读取,yyrestart() 重置输入状态,用来读取多个输入文件。

  2. 创建并使用 YY_BUFFER_STATE 输入缓冲区

  3. #define YY_INPUT(buf, result, max_size)

    当词法分析器的输入缓冲区为空时,就会调用 YY_INPUT,buf 是缓存区,result 等于实际存放在缓冲区的字符大小,max_size 缓存区的最大值。定义部分就是要把字符串拷贝到 buf 中。YY_INPUT 一般用于输入来自于其他一些内容,而这些内容无法预先载入字符串缓冲区且无法支持标准输入输出。

状态

定义:%x,%s
切换:BEGIN(S)

Bison

每次规约就会执行规则相关联的动作
yyparse() 会调用yylex()获取记号,yyval 或得记号值。

相关文章

  • Flex & Bison 笔记

    lex 文件结构 lex 文件命名通常以 .l 结尾,共分为三个部分,由 %% 分割。 声明部分%{会被原封不动拷...

  • Flex和Bison应用场景

    前面我们学习了Flex和Bison的语法和使用规则,后期我们主要考虑清楚Flex和Bison的应用场景。 分析SQ...

  • 《Flex & Bison》阅读笔记

    最近在看 《Flex & Bison》 这本书, 针对书中的例子进行解读和笔记, 以消化每一个知识细节, 所以本文...

  • centos7安装Thrift

    1、安装依赖 yum -y install automake libtool flex bison pkgconf...

  • 三. Flex进阶:需要了解的一些知识

    参考:词法分析器生成工具flex词法分析器总结--flex&bison词法分析生成器flex的选项 1. Flex...

  • Flex & Bison 开始

    Flex 与 Bison 是为编译器和解释器的编程人员特别设计的工具: Flex 用于词法分析(lexical a...

  • 使Emacs支持词法分析器 flex

    最近在学习 flex & bison,EmacsWiki 上的 flex-mode 写的太烂了, 语法高亮支持的很...

  • 2021-11-05

    sudo apt-get install git-core gnupg flex bison build-esse...

  • python3

    编译前安装yum -y install gcc openssl-devel flex bison zlib* vi...

  • 【五】词法解析器和语法解析器

    前言 这个是脚本语言的起点,我用的工具是bison和flex,PHP使用的是bison和re2c,没有太多差异 词...

网友评论

      本文标题:Flex & Bison 笔记

      本文链接:https://www.haomeiwen.com/subject/vdbroxtx.html