【问题标题】:Reference to construct a mini c++ code generation参考构造一个mini c++代码生成
【发布时间】:2014-09-02 01:20:11
【问题描述】:

我正在尝试构建一个 c++ 编译器。我已经在 Visual Studio 上使用 lex 和 Bison 构建了语法和语义规则,因此下一步是构建代码生成。是否有任何在线参考可以帮助我构建代码生成? 任何帮助表示赞赏。

【问题讨论】:

  • 我有点惊讶您使用 Lex 和 BISON。我不认为 C++ 可以在 BISON 的约束下完全解析,因为 C++ 需要太多关于以前解析过的实体的知识,并且需要多次通过才能正确解析程序。您是否在真实的源文件上尝试过您的解析器并确保它可以工作?使用命名空间和嵌套类等等...?
  • @uliwitness 实际上我做到了。

标签: visual-studio compiler-construction code-generation bison lex


【解决方案1】:

不久前我在博客上写过编写编译器的各个方面:

http://orangejuiceliberationfront.com/how-to-write-a-compiler/

我还写了关于对象如何在 RAM 中布局的文章:

http://orangejuiceliberationfront.com/runtime-time/

这是您要查找的信息吗?我想我博客 (http://orangejuiceliberationfront.com/category/language-design/) 上的整个语言设计部分都会对这种情况感兴趣。它以 MacOS 为中心,但无论您使用什么平台,生成 Intel 机器代码等的一般基础都是相同的。

当然,关于如何编写 C++ 编译器的唯一硬性规范是 ISO C++ 标准规范,您可以从 ISO 网站上花一大笔钱购买。但该规范当然假设您知道如何编写编译器。

【讨论】:

  • 实际上我需要整个步骤(a-z 步骤)来使用 lex 分析器和野牛解析器构建代码生成。
  • 没什么大不了的。 BISON 允许您指定返回某些内容的代码,因此只需为您的 AST(语法树)定义数据类型,并在 BISON 文件中创建该类型的对象,然后插入参数(我认为 BISON 使用 $1 和 $2 等为此...?或者可能是 %lhs 左右?),然后返回该对象。最后,您将获得可以从中生成代码的语法树。
  • 我说我想为我的迷你 c++ 语言构建代码生成。不仅使用 lex 和 bison,例如使用虚拟机 (vm),步骤是什么?
  • 我链接到的“如何编写编译器”文章对此进行了描述。
猜你喜欢
  • 1970-01-01
  • 2015-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-11
  • 2012-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多