我有一個需要使用flex和野牛的學校項目。我想使用C++,以便可以訪問STL和我自己寫的類。我們提供了下面的Makefile:如何在flex和bison中使用C++?
CC = gcc
CFLAGS = -g
OBJs = parse.tab.o symtab.o attr.o lex.yy.o
default: parser
parser: ${OBJs}
${CC} ${CFLAGS} ${OBJs} -o parser -lfl
lex.yy.c: scan.l parse.tab.h attr.h
flex -i scan.l
parse.tab.c: parse.y attr.h symtab.h
bison -dv parse.y
parse.tab.h: parse.tab.c
clean:
rm -f parser lex.yy.c *.o parse.tab.[ch] parse.output
depend:
makedepend -I. *.c
scan.l裏和parse.y有一些初步的Flex /野牛的東西產生了掃描器和分析器。我需要將我自己的東西添加到這些文件。 symtab。{h,c}應該是一個符號表的實現。 attr。{h,c}是一些屬性魔法。我想使symtab.c成爲一個.cc文件,所以我可以使用STL。我還有其他想要使用C++的原因。
我試圖使用parse.ypp文件,以便生成一個.cpp文件。但問題是我沒有得到正確的.h文件。我改變了的Makefile看起來像這樣:
CC = g++ # Change gcc to g++
CFLAGS = -g
OBJs = lex.yy.o parse.tab.o symtab.o attr.o
default: lex.yy.c parser # added lex.yy.c so I could just keep lex stuff in C since I don't really need C++ there
parser: ${OBJs}
${CC} ${CFLAGS} ${OBJs} -o parser -lfl
lex.yy.o: scan.l parse.tab.h attr.h # added this rule to use gcc instead of g++
gcc -c -o lex.yy.o lex.yy.c
lex.yy.c: scan.l parse.tab.h attr.h
flex -i scan.l
parse.tab.cpp: parse.ypp attr.h symtab.h
bison -dv parse.ypp
parse.tab.h: parse.tab.cpp # I want a parse.tab.h but I get parse.tab.hpp
clean:
rm -f parser lex.yy.c *.o parse.tab.cpp parse.tab.h parse.output
depend:
makedepend -I. *.c
有人能告訴我什麼,我需要添加或做的就是C++的工作?應該指出,我在.y(或.ypp)文件中添加了一些東西來處理從C到C++的轉換。特別是,我不得不聲明一些東西。我的主要問題是,當我運行make時,scan.l有一堆語法錯誤,它們似乎是因爲它不能包含parse.tab.h(因爲它永遠不會生成)。
爲了記錄,flex使用 - +或--C++命令行標誌來生成C++詞法分析器,而不是C語言。考慮一下,雖然我不認爲這是你的問題在這種情況下。 – 2009-04-22 18:37:31