Flex& Bison:在单独的文件中定义main函数

时间:2011-07-11 19:01:42

标签: function bison main flex-lexer

我正在尝试使用Flex和Bison创建一个小型翻译。

现在我有两个文件:parser.lparser.y。通常,main函数放在parser.y文件中。我想要做的是将main函数放在一个不同的文件main.cpp中,这使我的包看起来很整洁。

#include "y.tab.h"

int main()
{
   yyparse();
   return 0;
}

但是当我编译时,我收到了一个错误:

undefined reference to `main'

所以我知道包含y.tab.h会有问题。

你能告诉我怎么做吗?

解决方案

我刚想通了: 将以下内容添加到main.c文件中:

    extern FILE *yyin;
    extern FILE *yyout;
    extern int yyparse(void);

1 个答案:

答案 0 :(得分:1)

所以注意到:

  

我只想出来:将以下内容添加到main.c文件中:

     

extern FILE *yyin; extern FILE *yyout; extern int yyparse(void);

@Jonathan Leffler Noted

  

您不需要yyinyyout,因为您还没有(还)参考   它们来自包含main()的文件。但是,如果你最终做到了   工作,例如从命令行中指定的文件读取   标准输入,您可能需要它们。如果是Bison会很好   生成一个带有适当声明的标头。该   但是,y.tab.h文件不是该信息的地方;它是   用于在解析器和词法之间传递信息   分析器,而不是应用程序和解析器之间。