【问题标题】:using STL in lex/flex code在 lex/flex 代码中使用 STL
【发布时间】:2013-10-03 20:48:11
【问题描述】:

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

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

谢谢..

【问题讨论】:

  • 我重新标记了帖子。 Flex-lexer 用于词法分析器... [它现在甚至在 Flex 标签的“悬停细节”中这么说
  • 如果我没记错的话,Flex(大多数版本)的输出可以编译为 C++。
  • 只要你用g++编译器编译。代码将被视为 C++ 源文件(即使文件的扩展名是 .c)。如果您想强制输出文件具有 (.cpp) 扩展名,您可以使用 -o 标志和 flex
  • 好的,非常感谢!我会试试这个..

标签: c++ stl yacc flex-lexer


【解决方案1】:

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

  • 创建一个单独的c++文件,用c++实现函数并导出到C:

    外部“C”{ 无效 f() { // 这里是 C++ 代码 } }

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-21
      相关资源
      最近更新 更多