我正在尝试使用Flex和Bison创建一个小型翻译。
现在我有两个文件:parser.l
和parser.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);
答案 0 :(得分:1)
所以注意到:
我只想出来:将以下内容添加到main.c文件中:
extern FILE *yyin; extern FILE *yyout; extern int yyparse(void);
@Jonathan Leffler Noted
您不需要
yyin
或yyout
,因为您还没有(还)参考 它们来自包含main()
的文件。但是,如果你最终做到了 工作,例如从命令行中指定的文件读取 标准输入,您可能需要它们。如果是Bison会很好 生成一个带有适当声明的标头。该 但是,y.tab.h
文件不是该信息的地方;它是 用于在解析器和词法之间传递信息 分析器,而不是应用程序和解析器之间。