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