【问题标题】:Example compilers [closed]示例编译器 [关闭]
【发布时间】:2011-02-07 02:39:19
【问题描述】:

我正在寻找能够从编程语言的输入程序创建 Win32 程序的编译器的源代码(哪个没关系,也许越简单越好)

但我找不到适合我的东西,像 GCC 这样的大型编译器让我非常困惑,因为它们有很多功能,我不知道从哪里开始。

  • 是否有针对某种编程语言的 OpenSource Win32 微编译器,我可以看看?

【问题讨论】:

  • 实际上我正在为我的 Win32 平台语言开发一个编译器。我建议您阅读 PE 头文件,并获取 x86 Intel 参考手册的副本以实现操作码。然后你应该创建一些“抽象”执行层,并使用这个模型来预测处理器的状态以产生一个有效的程序集。
  • 书籍列表,其中可能包含许多示例编译器。
  • 不,第一个答案是一系列好书和文章、关于编译器构造和理论的网页,以及许多其他完全适合您问题的答案。

标签: open-source compiler-construction compiler-theory


【解决方案1】:

http://en.wikipedia.org/wiki/List_of_compilers 选择了许可证类型为“开源”的那些

【讨论】:

  • 那些编译器对我没有帮助。你怎么指望我去挖掘一万行代码只是为了找出基础知识?
  • 你认为编译器的代码数量少于 10 个吗?我有一种感觉,没有。
  • 有很多这样的编译器。如果去掉复杂的语法和优化,编译器真的没那么复杂。诚然,这样的编译器对于实际的编码工作并没有多大用处,但非常适合学习编译器工作原理的基础知识。
【解决方案2】:

gas 可以将汇编语言转换为目标代码,然后ld 可以与适当的运行时链接以生成程序。

【讨论】:

  • 两者都不是编译器。
  • 反对 WhirlWind。
  • 根据定义,汇编程序是一个编译器。赞成反对反对者。是的,如果你正在实现一个编译器,你不应该被 PE 文件格式所困扰——这不是编译器的工作,而是链接器的工作。
【解决方案3】:

我建议拿起一本编译器教科书。他们解释了编译器的所有必需组件,并且通常从头到尾开发编译器。

我拥有一份来自我的编译器课程的Modern Compiler Implementation in Java 副本,我对此非常满意。

【讨论】:

    【解决方案4】:

    如果您的目标是了解编译器的工作原理和/或如何编码,那么您真的应该阅读有关该主题的书籍。但是,在查找源代码示例时,请尝试使用 Pascal 编译器示例,例如 this one

    Pascal 的语法有点简单,在很多书中都有实现。

    【讨论】:

      【解决方案5】:

      最简单的编程语言是汇编,准确地说是 x86 汇编。最著名的汇编器 NASM 是开源的;您可以在以下位置查看它的来源:

      http://repo.or.cz/w/nasm.git

      NASM 具有确实“编译”成汇编语句的宏。虽然它不是一门成熟的语言,但它专注于基础。

      【讨论】:

        【解决方案6】:

        我建议寻找用于 MS-DOS(16 位)的 Pascal、C 或 SmallC 编译器源代码。特别是如果它们将自己限制在 16 位平面实模式(

        对分段实模式的支持增加了最好避免的大量复杂性,并且与 32 位平面保护模式程序(非 OS 32 位编程)无关。

        对于非 x86 处理器,Jack Crenshaw 的系列文章“Let's Build a Compiler”的示例程序是针对摩托罗拉 MC68000 16/32 位处理器的类似 Pascal 的语法编译器。还有 Marcel Hendrix 在 Win32 上用 Forth 写的 version of the series

        还有TCC - Tiny C 编译器,它支持 PE-i386 输出(即 Win32)。

        尽管如果您懒得阅读 Firas Assaad 在 cmets 中提供的整个 SO 链接,其中包含除其中一个之外的所有链接,我相信您会发现编译器的源代码非常长。

        【讨论】:

          【解决方案7】:

          您是想了解如何构建编译器,还是想了解 Win32 可执行文件的内部外观?

          如果是前者,那么阅读有关如何创建编译器的书将比尝试对源代码进行逆向工程更有效率。编译器与您所见过的任何东西都不一样,让作者带您了解所使用的原理、常用技术和工具真的很有帮助。还值得指出的是,编译器是分阶段构建的,只有在实现接近尾声时,您才需要了解您所针对的 CPU 和操作系统。如果您不熟悉编译器构造,那么在进入该阶段之前,您需要了解很多内容。

          但是,如果您想了解 Win32 可执行文件的格式,那么您需要了解 x86(或 x64)汇编代码和可移植执行 (PE) 文件格式(Windows 将其用于可执行文件)。对于 x86 汇编代码的介绍,我推荐 Paul Carter 博士出色的“PC 汇编语言”免费电子书 http://www.drpaulcarter.com/pcasm/,对于 PE,我将从这里开始 http://msdn.microsoft.com/en-us/magazine/cc301805.aspxhttp://msdn.microsoft.com/en-us/magazine/cc301808.aspx

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-07-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-04-12
            相关资源
            最近更新 更多