编译器由两个主要的块组成:“前端”和“后端”。 编译器的前端分析源代码,并构build某种forms的源代码的“中间表示”,这比源代码更容易通过机器algorithm进行分析(即源代码,例如C ++被devise为帮助人类程序员编写代码,中介forms被devise为帮助简化分析所述中介forms的algorithm更简单)。 编译器的后端采用中间forms,然后将其转换为“目标语言”。
现在,通用编译器的目标语言是各种处理器的汇编语言,但是没有什么能阻止编译器后端以其他语言生成代码,只要目标语言(至less)像通用CPU汇编器。
现在,正如你可以想象的那样,C肯定和CPU的汇编程序一样灵活,从C ++到C的编译器从技术angular度来说实际上是没有问题的。
所以你有:C ++ — frontEnd —> someIntermediaryForm — backEnd —> C
你可能想要检查这些人: http ://www.edg.com/index.php?location = c_frontend (上面的链接只是可以做什么的信息,他们许可他们的前端数万美元)
PS据我所知,GNU没有这样一个C ++到C编译器,这完全击败了我(如果我正确的话)。 因为C语言相当小,内部机制相当简陋,所以C编译器需要像一个人一年的工作(我可以告诉你这个第一手原因,因为我可能几年前写了一个这样的编译器,它会产生一个[虚拟]堆栈机器中间代码),并能够拥有一个维护,最新的C ++编译器,而只需要编写一次C编译器将是一件好事情… …