0

我正在尝试使用 lex/flex 和 yacc/bison 实现汇编语言解析器的原型。我想创建一个符号表,它是vector一个struct. 但是,我是 lex 的新手,只知道当 lex 生成 C 代码时,我猜想符号表不能直接在 lex 文件中使用,因为它 C 没有 STL。

有没有办法可以帮助我从 lex 操作矢量符号表并从 yacc 代码访问它?

谢谢..

4

2 回答 2

1

我在构建自定义编译器时遇到了类似的问题。有几种方法:

  • 创建一个单独的 c++ 文件,在 c++ 中实现函数并将其导出为 C:

    extern "C" { void f() { // 这里是 C++ 代码 } }

现在您可以从 lex/yacc 生成的代码中调用它。

  • 在flex/bison中生成c++代码,然后可以直接用语法编写C++代码。

  • 您仍然可以在语法中包含 C++ 代码,但这不是一个好主意,原因有很多。

于 2013-10-03T22:06:37.073 回答
0

flex 和 bison 具有 C++ 友好的等价物 flex++ 和 bison++。这些手册页可能对您有所帮助。

flex++ 就是简单的 flex 输出 C++ 代码。bison++ 是一个独立的项目,基于 bison,生成 C++ 代码。

于 2013-10-03T22:12:38.160 回答