【发布时间】:2011-10-03 01:28:56
【问题描述】:
我正在尝试使用 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);
【问题讨论】:
-
我将它从 Adobe Flex 重新标记为 Gnu-Flex。
-
您实际上并不需要
yyin或yyout,因为您(尚未)从包含main()的文件中引用它们。但是,如果您最终完成了诸如从命令行上指定的文件而不是标准输入读取之类的工作,则可能需要它们。如果 Bison 生成一个带有适当声明的标头,那就太好了。但是,y.tab.h文件不是存放该信息的地方;它用于在解析器和词法分析器之间传递信息,而不是在应用程序和解析器之间传递信息。
标签: function bison main flex-lexer