1

我是使用 bison 和 flex 的大一新生。我下载了gnu bison官网提供的包。有一个示例文件夹包含 C++ 计算器的源代码。这是下载链接: ftp: //ftp.gnu.org/gnu/bison/

我做了以下动作:

bison -d calc++-parser.yy => OK,生成 calc++-parser.tab.hh 和 calc++-parser.tab.cc

flex calc++-scanner.ll => OK,生成 lex.yy.c

cc -o a.out lex.yy.c calc++-parser.tab.cc -lfl => 失败

我不知道为什么我在第三步失败了,事实上,我真的不知道我是否做对了。

calc++-scanner.ll:2:20: 错误: cstdlib: 没有这样的文件或目录

calc++-scanner.ll:5:19:错误:字符串:没有这样的文件或目录

在 calc++-scanner.ll:6 中包含的文件中:../../doc/bison.texinfo:8284:16:错误:映射:没有这样的文件或目录

在 ../../doc/bison.texinfo:8285 包含的文件中,来自 calc++-scanner.ll:6: ../../doc/bison.texinfo:8440: 错误:预期 '=', ', ', ';', 'asm' 或 'attribute' 在 'calcxx_driver' 之前

(......这样的错误消息)

编译器版本:gcc 4.2.1

野牛:2.5.1

弹性:2.5.4

使用 {g++} 代替 {cc} 后:

u97530048@csie0[9:45pm]~/Compiler/calc++>g++ -o a.out lex.yy.c calc++-parser.tab.cc -lfl

在 ../../doc/bison.texinfo:8285 包含的文件中,来自 ../../doc/bison.texinfo:8504:

./calc++-parser.hh:126: 错误: 'class yy::calcxx_parser' 的重新定义 calc++-parser.tab.hh:96: 错误: 'class yy::calcxx_parser' 的先前定义

4

2 回答 2

1

全部:calc++.out

calc++.out: calc++-driver.o calc++-parser.o calc++-scanner.o calc++.o

g++ -o calc++.out calc++-driver.o calc++-parser.o calc++-scanner.o calc++.o

calc++-driver.o: calc++-driver.cc calc++-driver.hh calc++-parser.hh

g++ -c 计算++-driver.cc

calc++-parser.o: calc++-parser.cc calc++-parser.hh calc++-driver.hh

g++ -c calc++-parser.cc

calc++-parser.cc calc++-parser.hh: calc++-parser.yy

野牛 --defines=calc++-parser.hh -ocalc++-parser.cc calc++-parser.yy

calc++-scanner.o: calc++-scanner.cc calc++-parser.hh calc++-driver.hh

g++ -c 计算++-scanner.cc

calc++-scanner.cc: calc++-scanner.ll

flex -ocalc++-scanner.cc calc++-scanner.ll

计算++.o:计算++.cc

g++ -c 计算++.cc

.PHONY:干净

干净的:

-rm *.o calc++-parser.hh calc++-parser.cc calc++-scanner.cc location.hh position.hh stack.hh calc++.out

于 2013-05-27T15:41:03.390 回答
0

我无法用 Bison 2.7.2 重现您的问题。Bison 2.5 很古老,您应该升级并报告您可能遇到的问题。

于 2013-05-27T12:11:28.627 回答