我是使用野牛和弹性的新生。 我下载了gnu bison官方网站提供的软件包。 有一个示例文件夹包含C ++中计算器的源代码。 这是下载链接:ftp://ftp.gnu.org/gnu/bison/
我做了以下行动:
bison -d calc ++ - parser.yy =>好的,生成calc ++ - parser.tab.hh和calc ++ - parser.tab.cc
flex calc ++ - scanner.ll =>好的,生成lex.yy.c
cc -o a.out lex.yy.c calc ++ - parser.tab.cc -lfl =>失败
我不知道为什么我在第三步失败了,事实上,我真的不知道我是否做得对。
calc ++ - scanner.:2:20:错误:cstdlib:没有这样的文件或目录
calc ++ - scanner.:5:19:错误:字符串:没有这样的文件或目录
在calc ++中包含的文件 - scanner.:6:../../ doc / bison.texinfo:8284:16:错误:地图:没有这样的文件或目录
在../../doc/bison.texinfo:8285中包含的文件中,来自calc ++ - scanner.:6:../../ doc / bison.texinfo:8440:错误:预期'=' 'calcxx_driver'之前的'',',';','asm'或'attribute'
(......这样的错误消息)
编译器版本:gcc 4.2.1
野牛:2.5.1
Flex:2.5.4
使用{g ++}代替{cc}:
u97530048 @ csie0 [9:45 pm]〜/ Compiler / calc ++> g ++ -o a.out lex.yy.c calc ++ - parser.tab.cc -lfl
包含在../../doc/bison.texinfo:8285,from ../../ doc / bison.texinfo:8504中的文件中:
./ calc ++ - parser.hh:126:错误:重新定义'class yy :: calcxx_parser' calc ++ - parser.tab.hh:96:错误:'class yy :: calcxx_parser'的先前定义
答案 0 :(得分:1)
all: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 calc ++ - 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
bison --defines = calc ++ - parser.hh -ocalc ++ - parser.cc calc ++ - parser.yy
calc ++ - scanner.o:calc ++ - scanner.c ++ calc ++ - parser.hh calc ++ - driver.hh
g ++ -c calc ++ - scanner.cc
calc ++ - scanner.cc:calc ++ - scanner.ll
flex -ocalc ++ - scanner.cc calc ++ - scanner.ll
calc ++。o:calc ++。cc
g ++ -c calc ++。cc
.PHONY:干净
清洁:
-rm * .o calc ++ - parser.hh calc ++ - parser.cc calc ++ - scanner.cm location.hh position.hh stack.hh calc ++。out
答案 1 :(得分:0)
我无法用Bison 2.7.2重现你的问题。 Bison 2.5很古老,你应该升级并报告你可能遇到的问题。