如何使用bison提供的calc ++示例?

时间:2013-05-26 12:30:51

标签: bison calculator flex-lexer

我是使用野牛和弹性的新生。 我下载了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'的先前定义

2 个答案:

答案 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很古老,你应该升级并报告你可能遇到的问题。