我正在尝试使用 lex/flex 和 yacc/bison 实现汇编语言解析器的原型。我想创建一个符号表,它是vector
一个struct
. 但是,我是 lex 的新手,只知道当 lex 生成 C 代码时,我猜想符号表不能直接在 lex 文件中使用,因为它 C 没有 STL。
有没有办法可以帮助我从 lex 操作矢量符号表并从 yacc 代码访问它?
谢谢..
我正在尝试使用 lex/flex 和 yacc/bison 实现汇编语言解析器的原型。我想创建一个符号表,它是vector
一个struct
. 但是,我是 lex 的新手,只知道当 lex 生成 C 代码时,我猜想符号表不能直接在 lex 文件中使用,因为它 C 没有 STL。
有没有办法可以帮助我从 lex 操作矢量符号表并从 yacc 代码访问它?
谢谢..
我在构建自定义编译器时遇到了类似的问题。有几种方法:
创建一个单独的 c++ 文件,在 c++ 中实现函数并将其导出为 C:
extern "C" { void f() { // 这里是 C++ 代码 } }
现在您可以从 lex/yacc 生成的代码中调用它。
在flex/bison中生成c++代码,然后可以直接用语法编写C++代码。
您仍然可以在语法中包含 C++ 代码,但这不是一个好主意,原因有很多。
flex 和 bison 具有 C++ 友好的等价物 flex++ 和 bison++。这些手册页可能对您有所帮助。
flex++ 就是简单的 flex 输出 C++ 代码。bison++ 是一个独立的项目,基于 bison,生成 C++ 代码。