【问题标题】:How can I make the calc++ example of bison-doc work?如何使 bison-doc 的 calc++ 示例工作?
【发布时间】:2019-02-09 02:31:43
【问题描述】:

我安装了一些野牛示例,作者:

$ sudo apt  install bison-doc

$ ls  /usr/share/doc/bison-doc/examples/calc++/
calc++.cc  calc++-driver.cc  calc++-driver.hh  calc++-parser.yy  calc++-scanner.ll

然后我通过创建一个 Makefile 来构建它

$ cp -r /usr/share/doc/bison-doc/examples/calc++/ /tmp
$ cd /tmp/calc++/

$ cat Makefile
calc++: calc++-parser.yy calc++-scanner.ll calc++-driver.hh calc++-driver.cc calc++.cc
    bison calc++-parser.yy -o calc++-parser.cc
    flex calc++-scanner.ll
    g++ -o calc++ *.cc *.c -lm 
clean:
    rm calc++ *.o position.hh stack.hh location.hh calc++-parser.tab.hh calc++-parser.tab.cc calc++-parser.cc calc++-parser.hh lex.yy.c

$ make
bison calc++-parser.yy -o calc++-parser.cc
flex calc++-scanner.ll
g++ -o calc++ *.cc *.c -lm 

但是当我尝试运行可执行文件时,它会立即返回,而不是等待标准输入:

$ ./calc++
$

我做错了什么?我怎样才能让它工作?谢谢。

【问题讨论】:

    标签: c++ bison


    【解决方案1】:

    通过读取calc++.cc,它对通过命令行传递的文件进行操作。您可以通过/dev/stdin 作为文件名来读取标准输入。

    另外请注意,bison 中 C++ 支持的质量在最近几个版本中发生了显着变化,如果可能,请使用 bison 3.3。

    【讨论】:

    • 谢谢。 main() 中的选项解析意味着什么?我无法分辨来自 main() 的输入格式。
    • -s-p 只是为了调试这两个阶段,请参阅文档中的前几页。这些可能随时发生,并且只会影响后续命名的文件。
    • 这在我看来就像示例中的错误。 driver::scan_begin 将空的 file 或字符串 "-" 都理解为表示 stdin,但如果没有非选项命令行参数,顶层不会调用解析器。 (if (file.empty () || file == "-") yyin = stdin;)(来自here)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 2015-08-20
    • 2017-01-11
    • 1970-01-01
    • 2012-05-01
    • 2019-05-20
    相关资源
    最近更新 更多