【问题标题】:How to use the calc++ example provided by bison?bison提供的calc++示例如何使用?
【发布时间】:2013-05-26 12:30:51
【问题描述】:

我是使用 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: error: cstdlib: No such file or directory

calc++-scanner.ll:5:19: error: string: No such file or directory

在 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'的先前定义

【问题讨论】:

    标签: bison calculator flex-lexer


    【解决方案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 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.cc 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.cc location.hh position.hh stack.hh calc++.out

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 谢谢阿基姆!我已经升级了它。我终于找到了一个网站为这个例子提供了 Makefile。 (我尽可能地寻找它)。我将提供解决我的问题的 Makefile。
      猜你喜欢
      • 1970-01-01
      • 2012-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-24
      • 1970-01-01
      • 2019-03-04
      • 2018-06-01
      相关资源
      最近更新 更多