gpt4 book ai didi

c++ - 我如何在 flex 和 bison 中使用 C++?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:26:14 25 4
gpt4 key购买 nike

我有一个学校项目,我们需要使用 flex 和 bison。我想使用 C++,这样我就可以访问 STL 和我自己编写的类。我们获得了以下 Makefile:

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/bison 东西来生成扫描器和解析器。我需要将我自己的东西添加到这些文件中。 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 或 bison 做任何事情来使用 C++,我已经做过很多次了。您只需确保使用的是 g++,而不是 gcc。

您的问题出在 Makefile,而不是代码。

关于c++ - 我如何在 flex 和 bison 中使用 C++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/778431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com