我正在尝试使用Flex和Bison制作一个小型解释器。
现在我有两个文件:parser.l
和parser.y
。通常,主要功能放在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);
SO注:
我刚刚明白了:在main.c文件中添加以下内容:
extern FILE *yyin; extern FILE *yyout; extern int yyparse(void);
@Jonathan Leffler注意
你真的不需要
yyin
或yyout
,因为你(还)没有引用从包含main()
的文件中获取它们。然而,如果你最终做了而是从命令行指定的文件中读取等工作对于标准输入,您可能需要它们。如果野牛生成一个带有适当声明的头文件。的然而,y.tab.h
文件不是存放这些信息的地方;它是用于在解析器和词法之间传递信息分析器,而不是在应用程序和解析器之间。