编译器是用什么语言编写的?

编译器是用什么语言编写的?

编译器所编写的语言与其编译的语言是否不同?

答案1

编译器涉及三种语言:被编译的语言(源语言)、被编译成的语言(目标语言)以及编译器所用的语言(实现语言)。一般来说,实现语言要么是通用语言,如 C 或 C++,要么是源语言。目标语言可以是某种与源语言相近的语言,这种语言已经存在,也可以是汇编语言。有时会有自定义的中间语言,这样各种语言就可以有一个共同的后端。这就是 gcc 的工作方式。C、C++、Fortran、Ada 和其他语言都有前端。每个语言都被编译成相同的中间语言,然后被编译成特定于体系结构的汇编语言。

如果编译器使用与编译语言相同的语言编写,则该编译器被称为自托管。如果一种语言是新的,那么它就没有现成的编译器,这意味着它的第一个编译器不能是自托管的(否则,第一个编译器如何编译?)。因此,任何新语言编译器的第一次迭代总是用不同的语言编写的。话虽如此,自托管更方便;作者只需要精通一种语言。

答案2

理论上,你可以用任何语言编写编译器。甚至你正在编译的那个

答案3

从我几年前(2010 年)做的一项小研究来看:

  • 奥卡姆ocaml:
    解析器:(o)caml
    核心:C
  • C++g++:
    解析器:C
    核心:C(现在是 c++)-> 早期用 bison 生成,然后手写
  • dmd:
    解析器:C
    核心:C
  • 哈斯克尔GHC:
    解析器:haskell (+ C)
    核心:Haskell
    -> 以前是 LML
  • Cgcc:
    解析器: C
    核心: C
    -> 以前为 BCPL / asm
  • 短暂聊天
    短暂聊天
  • Lisp
    Lisp

答案4

有关这方面的更多信息,请访问堆栈溢出, 喜欢编写编译器的最佳语言是什么?

更多相关内容请访问 SO

我知道问题从 Stack Overflow 移到这里,但我不知道反过来是否也有效。

相关内容