【问题标题】:How to include Yacc/Bison-Parser into own project?如何将 Yacc/Bison-Parser 包含到自己的项目中?
【发布时间】:2014-06-11 08:25:17
【问题描述】:

我想在我自己的项目中使用 yacc/bison 解析器。 使用我自己的 Makefile 构建解析器时,一切正常。我从http://ymorin.is-a-geek.org/projects/kconfig-frontends 获取了源代码(只是解析器:/<path-to-kconfig>/libs/parser

现在,当在 Eclipse 中将这些文件包含到 C++ 项目中时,在点击 make 后,编译器在 .y 文件处崩溃,因为语法错误 - 无法读取 .y - 语法。所以我从构建过程中排除了解析器。

Yacc and Lex inclusion confusion 的回答中,我读到只需要包含 .h 文件,才能使用解析器的功能。

所以我所做的是:

  • 为了从 my 项目中访问解析器源,我创建了一个简单的函数,它只在 yconf.y 和 yconf.c 中的控制台上打印一行:void testout(char *txt) {printf(txt);}
  • 我什至用函数头 void testout(char *txt); 创建了一个 yconf.h
  • 用我自己的 makefile 编译了解析器
  • main,我想调用函数的地方如下:

    #include "y.tab.h"
    #include "yconf.h"
    #include <stdio.h>
    
    extern "C"{
    int main(int argc, char *argv[])
    {
        char configIn[] = "test";
        printf(configIn);
    
        testout(configIn);
    
        return 0;
    }
    }
    

错误

现在编译时出现错误:undefined reference to 'testout(char*)'。但 Eclipse 本身可以解析该功能 - 单击该功能时,yconf.h 将打开。这就是为什么我不知道问题到底出在哪里。

Eclipse 设置:

在 /project/properties/C/C++ Build/Settings 中,我为 gccg++ 和链接器放置了相同的包含路径到解析器源。此外,我在此设置中将y.tab.hyconf.h 添加为“包含文件”

如果需要更多信息,请询问。

感谢任何有关如何解决此问题的建议。感谢支持

亲切的问候

【问题讨论】:

    标签: c eclipse parsing makefile bison


    【解决方案1】:

    好吧,真的只需要y.tab.hy.tab.c。这是用这个 makefile 创建的:

    lex ./lconf.l
    bison -d -y ./yconf.y
    

    我的错误是:我正在使用 C++ 编程,而我在错误的位置使用了 extern "C" 命令,该头文件需要声明为 c 格式。这是正确的代码:

    extern "C"{
        #include "y.tab.h"
    }
    
    int main(int argc, char *argv[])
    {
    
        char configIn[] = "test";  
        testout(configIn);
        return 0;
    }
    

    (testout 是 y.tab.h/c 中的一个函数,带有参数 configIn 的简单 printf - 执行“test”时打印。)

    顺便说一句:我排除了解析器的所有源文件进行编译,但 y.tab.c

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多