如何将Yacc / Bison-Parser纳入自己的项目?

时间:2014-06-11 08:25:18

标签: c eclipse parsing makefile bison

我想将yacc / bison解析器用于我自己的项目。 使用我自己的Makefile构建Parser时,一切正常。我从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);} < / LI>
  • 我甚至用函数头void testout(char *txt);
  • 创建了一个yconf.h
  • 使用我自己的makefile编译解析器
  • 主要的,我想调用的函数如下:

    #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 ++构建/设置中我为gccg++以及链接器的解析器源添加了相同的包含路径。此外,我在此设置中添加了“包含文件”y.tab.hyconf.h

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

我很欣赏有关如何解决此问题的任何建议。感谢您的支持

亲切的问候

1 个答案:

答案 0 :(得分: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 - 当执行&#34; test&#34;被打印时。)

BTW:我排除了解析器的所有源文件以进行编译,但排除了y.tab.c