flex 与 bison的 调试

  1. 官方网站与文档(sourceforge我在使用的时候经常遇到无法访问的情况,自己想办法吧,你懂)
    1. flex:http://flex.sourceforge.net/

      文档:http://flex.sourceforge.net/manual/

    2. bison:http://www.gnu.org/software/bison/

      文档:https://www.gnu.org/software/bison/manual/html_node/index.html

    3. 我目前正在使用的版本分别为:flex 2.5.37、bison 3.0.2,均为 yum 安装
  2. 调试参数

    通过 --help 可以看到,flex 调试开关 -d,bison 调试开关为 -t,生成代码时加入这两个参数即可。

  3. 手动调整 bison 代码,光有开关是不够的,打开 gram.c,可以看到很多宏定义里边都有:“if (yydebug)”,搜索 "int yydebug;" 定义改为:“int yydebug = 1;”;还有一个办法是在其他文件中启动语法引擎前设置 yydebug 非零。

    参见章节:https://www.gnu.org/software/bison/manual/html_node/Tracing.html

  4. scan.c的错误修复,在我使用的版本中无法编译文件,错误:
    1. In file included from gram.y:14877:0:
      scan.c: In function ‘core_yylex’:
      scan.c:9263:47: error: macro "fprintf" requires 3 arguments, but only 2 given
           fprintf( stderr, "--scanner backing up\n" );
                                                     ^
      scan.c:9263:5: warning: statement with no effect [-Wunused-value]
           fprintf( stderr, "--scanner backing up\n" );
           ^
      scan.c:9266:52: error: macro "fprintf" passed 4 arguments, but takes just 3
                    (long)yy_rule_linenum[yy_act], yytext );
                                                          ^
      scan.c:9265:5: warning: statement with no effect [-Wunused-value]
           fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
           ^
        ...
    2. 打开 scan.c发现宏定义:
      1. #undef fprintf
        #define fprintf(file, fmt, msg)  fprintf_to_ereport(fmt, msg)
        
        static void
        fprintf_to_ereport(const char *fmt, const char *msg)
        {
        	ereport(ERROR, (errmsg_internal("%s", msg)));
        }
    3. 与其下 fprintf 的用法冲突,注释掉这几行即可
时间: 2024-10-17 16:56:48

flex 与 bison的 调试的相关文章

使用flex和bison实现的sql引擎解析

由于老师要求,最近在做oceanbase存储过程的实现,在oceanbase 0.4以前是不支持存储过程的.实现的主要步骤主要包括 1.语法解析 2.词法解析 3.具体执行语法树的步骤 现在先来说说语法解析吧,在这一块主要是使用的flex( 词法分析器生成工具) 和bison(语法分析器生成器) 这两个是对用户输入的存储过程语句进行解析的 来具体说说该怎么实现对sql语句的分析吧 1.首先建立一个lex的文件 %option noyywrap nodefault yylineno case-in

flex与bison

flex与bison 中文版 目录: 第一章:flex和bison简介 第二章:使用flex 第三章:使用bison 第四章:分析sql 第五章:flex规范参考 第六章:bison规范参考 第七章:二义性和冲突 第八章:错误报告和恢复 第九章:flex和bison进阶

在UNIX系统下联合编译flex 和bison 程序

flex 是一款词法解析开程序,而bison是一款语法解析开源程序.他们配合使用,就可以完成某些计算机脚本语言的语言的解析,如sql.这次我主要介绍flex 和bison在unix系统下的编译. 先看flex 代码: %{ #include "fb1-5.tab.h"//该文件由bison后面的bison生成.主要定义了token 的值.和yylval变量 %} %% "+" { return ADD; }//匹配上“+”,就返回token ADD,yylval 此

windows下安装flex与bison

首先先下载felx/bison for windows flex:http://gnuwin32.sourceforge.net/packages/flex.htm bison:http://gnuwin32.sourceforge.net/packages/bison.htm 没有额外需要的话直接下载Binaries压缩包就行了. 注意:bison还需要以下工具支持,在bison下载页会有这些工具的下载链接. flex单独解压即可,bison则需要和将相关工具解压缩到同一目录下. flex的b

OpenCASCADE Expression Interpreter by Flex & Bison

OpenCASCADE Expression Interpreter by Flex & Bison [email protected] Abstract. OpenCASCADE provide data structure of any expression, relation or function used in mathematics. Flex and Bison are tools for building programs that handle structured input

lex yacc flex bison

lex与yacc是两个在Unix下的分别作词法分析和语法分析的工具, Linux对应flex与bison. windows:http://sourceforge.net/projects/unxutils/

如何实现对ARM汇编指令的调试?

学习ARM汇编语言时,少不了对ARM汇编指令的调试.作为支持多语言的调试器,gdb自然是较好的选择.调试器工作时,一般通过修改代码段的内容构造trap软中断指令,实现程序的暂停和程序执行状态的监控.为了在x86平台上执行ARM指令,可以使用qemu模拟器执行ARM汇编指令,具体的调试方法,一起来看看吧. 一.准备ARM汇编程序 首先,我们构造一段简单的ARM汇编程序作为测试代码main.s. .globl _start _start: mov R0,#0 swi 0x00900001 以上汇编指

Linux c c++ 开发调试技巧

看到一篇介绍 linux c/c++ 开发调试技巧的文章,感觉挺使用,哪来和大家分享. 通向 UNIX 天堂的 10 个阶梯Author: Arpan Sen, 高级技术人员, Systems Documentation, Inc. (SDI) 讨论几种可以帮助 C++ 开发人员节省时间的技巧和免费工具. C++ 开发人员在日常工作中通常要完成多个任务:开发新软件.调试其他人的代码.制订测试计划.为每个计划开发测试.管理衰退软件(regression suite)等等.在多种角色之间频繁转换会消

Ubuntu下Snort从编译、安装到调试全过程

自:https://www.newbyter.net/?p=1403 一.编译 编译是在Ubuntu 11.04 (32bit)下完成的,Ubuntu采用默认安装方式. Snort本身用到了一些第三方的库,这些库默认在Ubuntu下并没有安装,因此需要我们自己手动安装.具体包括:libdnet-1.12.libpcap-1.0.0.pcre-8.12.zlib-1.2.5等,除此之外,还需要安装build-essential.flex和bison包. 这些第三方库的编译安装比较简单,一般只需要执