【问题标题】:Write a compiler from scratch in C [duplicate]用C从头开始编写编译器[重复]
【发布时间】:2011-08-15 21:14:37
【问题描述】:

可能重复:
How to code a compiler in C?

如何开始用 C 语言从头开始编写编译器(没有 Flex 或 Bison 或 Lex 或 Yacc)?我有一种语言,我为其编写了解释器,它有点像Forth。有点。它使用堆栈接收符号并一次解释一个。

如何制作编译器?

这不是一个特别垃圾的位;只是为了向人们展示语法和简单性。

http://github.com/tekknolagi/StackBased

【问题讨论】:

  • 从龙书开始-dragonbook.stanford.edu
  • @Hans - 这个问题并不是特别有用。我正在研究一个更简单的问题(考虑到我的语言),并且想自己动手,没有解析器/词法分析器工具。
  • @tekknolagi:这是很有帮助。如果您不打算使用任何现有工具,那么您将不得不阅读一本书。理论并不简单,不可能在 SO 帖子中解释整个过程。
  • 另见这个问题(答案中有很多参考资料):stackoverflow.com/questions/1669/learning-to-write-a-compiler

标签: c compiler-construction forth


【解决方案1】:

简单!

  1. 您将输入标记化。
  2. 您构建它的适当表示,通常这是一个抽象语法树,但这不是必需的。
  3. 您可以执行您可能需要的任何树转换(可选)。
  4. 您通过遍历树来生成代码。
  5. 您将任何不同的部分链接在一起(可选)

Flex 和 Bison 可在第 1 阶段和第 2 阶段提供帮助,其他一切由您决定。如果您仍然卡住,我建议您阅读“Programming Language Pragmatics”或 The Dragon Book。

【讨论】:

  • 我不知道在解释后去哪里。如何制作可以接受输入然后将其编译为二进制文件的东西?
  • @tekknolagi:首先考虑“我如何将其转换为 C 代码?”在程序结构的每一步。请记住,您不是在运行它,而是将您的应用程序转换为另一个指令集(无论是 CPU 还是 C)
  • 每条命令都对应C代码...会不会把所有的C写到一个文件中并使用gcc??
  • @tekknolagi:如果您不想生成程序集,这是一种完全合法的方法。其他选项是发出实际的汇编代码,或使用 LLVM。
  • 我不熟悉组装。这是一个很好的起点吗?
猜你喜欢
  • 1970-01-01
  • 2019-07-24
  • 1970-01-01
  • 1970-01-01
  • 2012-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-03
相关资源
最近更新 更多