我如何使用flex bison代码与c ++接口

时间:2013-09-19 05:08:16

标签: c++ parsing interface bison

我在a.h文件中声明了一个函数f(),在一个bison文件中定义它a.y并在其中调用它 a.cpp文件。

我将其编译为:

      g++ a.cpp a.tab.c lex.yy.c -o a

工作正常。

现在我想在b.cpp文件中调用此函数f()。

我该怎么办?

b.cpp文件中包含哪些文件以及编译时要提供的文件。

1 个答案:

答案 0 :(得分:0)

#include "a.h"并致电f()

a.cpp来自哪里?一般来说,对bison文件和另一个程序文件使用相同的前缀会让人感到困惑。似乎a.cpp包含main()函数(虽然这只是基于您的g++调用的猜测),因此它不适用于某些其他程序的目标文件。我要做的是如下:

bison -d -o parser.c parser.y
# For flex 2.5.4, you cannot put a space between -o and the filename.
# You should seriously think about upgrading to a non-prehistoric version
# flex -o lexer.c lexer.l
flex -olexer.c lexer.l
g++ -c -o parser.o parser.c
g++ -c -o lexer.o lexer.c
g++ -o a a.cpp parser.o lexer.o
g++ -o b b.cpp parser.o lexer.o

(上面会改变a.tab.h的名称,所以你需要在lexer.l中修复它。但这只是一个建议。)