C#中的开源C编译器?

我一直在进行编译器创建。 我发现了一些非常棒的初学者和先进的东西,但中间什么都没有。 我为玩具语言创建了3个不同的简单概念validation编译器,但我想让自己暴露在真实的东西之中。

语法方面最直接的真实语言似乎是C.因为我现在最熟悉的语言是C#,我喜欢研究用C#编写的真正的非教程C编译器的源代码。 是否存在(包含可用的源代码)?


理想情况下,我喜欢C编译器,而不是.NET或C#编译器,但使用C#编写的源代码。
我知道C# – > C感觉有点倒退,但是在我改变它之前,它允许我从熟悉的语言开始更深入地进入编译器。

虽然我不是在寻找C#/。NET编译器,但有些人会看到这个问题的人正在寻找:

  • 为.NET Framework创建语言编译器
  • Mono C#编译器
  • 用纯C#(.NET v1)编写的C#编译器的源代码 (感谢Luiscencio)

您将很难找到示例代码。 编译器编写者使用bootstrapping 。 第一个C编译器是用B编写的。然后用它来编写第一个C ++编译器。 用于编写C#编译器。 这通常用于编写托管代码的编译器。

这不是一个永远倒退的过程。 虽然旁路是常见的,但C编译器通常用于交叉编译另一个操作系统的编译器。

我想我用过这本书 ,附录中有很棒的C编译器代码。 用C语言编写。在编写大型项目中需要的Basic编译器时,我使用了它的一部分。 表达式解析器很难正确,它为运算符优先级规则提供了一个优雅的解决方案。

定位托管语言是实现这一目标的更简单方法。 语言不应该太重要,它正在使它工作,这是真正的挑战。 即使托管代码工作起来容易得多。 如果您想要定位C,您将需要黑带机器代码技巧以及对目标文件格式和链接器的深入洞察力。

在语法方面最直接的真实语言似乎是C.

我不确定你的“真实语言”是什么意思,但无论“真正的语言”是什么意思,我不能同意C有一个“直截了当”的词汇或句法语法,而且它的语义是不明确的。 如果你想要一种非常直接的语言,语义非常明确,为什么不去参加Scheme呢? Scheme有一个非常简单的语法,但确保其语义正确无疑是微不足道的。

通过谷歌发现这一点。

http://blogs.msdn.com/jmstall/archive/2005/02/06/368192.aspx

编辑:和这(不完全是C): http : //msdn.microsoft.com/en-us/magazine/cc136756.aspx

我不知道有一个存在,但没有理由不能或不应该。

为类似C语言编写编译器是一学期大学编译器课程的经典项目。 如果您已经了解C#,它提供了许多function,这将使您的工作比我在大学时更容易! 周围有很多库可以使工作变得更轻松,而不会带来挑战,如果您需要灵活性,您可以随时使用自己的特殊代码替换它们。

第一个C编译器是用BCPL编写的,因为它是他们拥有的。 当前的C编译器通常用C语言编写,因为它们旨在便于携带。 我认为没有人会认为C是编写编译器的好语言。(C#并不完美,但它更好!)在像C这样的静态编译语言中,我认为你没有得到多少好处,如果有的话,使用目标语言编写编译器。

HLL中的编译器可能具有许多优点。 它比用C写的更短更简单。只有这样才能使很多事情变得更加容易,以至于它们可以被拉到“太难以完全无人能做到”的门槛之下。 (海湾合作委员会对于用LLL编写的编译器如何如此复杂以至于以一种冰冷的速度运行是一种典型的海报。)优化基本上是图形转换,这不完全是C的强项。

我不认为使用C#编译C是“向后”的。除非有人提议用更高级别的语言重写所有的C代码,否则它仍然需要以某种方式编译,这意味着你需要一个编译器。 编译器是否应该使用能够提供最佳可靠性和性能的工具编写?

祝好运! 我期待看到你写的东西!

这里是wikipeddia的编译器列表,其中的maany是开源的http://en.wikipedia.org/wiki/List_of_compilers