Brief Introduction to compilerbook
什么是编译器?
编译器将用源语言表示的程序翻译成用目标语言表示的程序。此外,编译器也可用于改进程序。编译器协助程序员在编译时找到错误,避免了运行时错误。一般而言,越严格的编程语言,在编译的时候引发的错误越多,给程序的编写带来了更大的挑战。但与此同时,一旦编译通过,后续的错误会减少很多。
编译器与解释器不同。解释器在读取源程序的时候直接执行,不需要进行翻译,有时也称作虚拟机。编译器和解释器紧密相关,有时可以相互交换。比如Java编译器将Java源码编译成Java字节码,而字节码是汇编语言的一种抽象形式。Java解释器的一些实现一次执行一条指令;另一些实现将字节码翻译成本地机器码,直接在机器上执行,称作即时(Just In Time, JIT)编译。
学习编译器的原因
-
伟大的工匠必须熟悉他的工具。
-
可以构建自己的调试和翻译工具。
-
构造新的编程语言,如领域专用语言(Domain Specific Language, DSL)。
-
可以参与编译器相关的工作。
学习编译器的最佳方式
- 从头到尾写一个编译器。
题外话
- 建议基于C语言和X86汇编实现编译器。