(给程序员的那些事加星标)
作者:Java建设者/cxuan (本文来自作者投稿)
碎碎念
为什么这本书叫做 龙书(Dragon book)
?
这本书很有意思,它的书名是 《Compilers: Principles, Techniques, and Tools》
,也就是编译器的原则、技术和工具。但它却画出了一个恐龙和骑士,恐龙身上写的是 Complexity of Compiler Design
,也就是复杂的编译器设计
,骑士的盾上写的是 Syntax Directed Granslation
,也就是语法翻译。骑士的剑上看的不是很清楚,我猜测应该是优秀的编译器的意思。这是征服复杂性的隐喻。优秀的编译器会直接征服复杂的编译,复杂的编译设计永远无法攻破语法翻译。
什么是编译原理
计算机是只认识二进制的,但是我们平常开发中根本不会使用二进制进行开发,我们使用的都是 Java、C 这类的高级语言,每种语言都会经过一系列的转换才能被计算机识别,那么到底是谁做的这项工作呢?一个被称为 编译器(compiler)
的大佬出场了。
语言处理器
首先考虑一下一个例子,你如何才能和老外对话?你是不是需要学英语?我们有一些同学可能认为英语难学,经常会在英语书上做一些汉语标记方便理解。
那么,谁做了由英语到方便记忆
的英语之间的转换呢?答案是你的大脑。所以,我们可以归纳一下这个过程。
因为我们懂汉语(自己的一套语法规则),我们把英语(需要学习的语言)转换为我们便于理解的汉语(大脑翻译规则),我们才能学会英语和老外对话(转换为目标语言)。
这里我说一点:昨天晚上外出遛狗有个老黑和中国女生对话,中国女生竟然讲英文??????这可是中国本土好么,为什么外国人来到中国不讲汉语偏要中国人讲英文???你去外国旅游你会讲中文吗???这是一个基本认知问题,别怪我偏执。我认为外国人要来我们国家最基本的一点就是:你要学中文,千万不要抱着英语为上的心态,汉语不输任何语言。
回到正题,我们上面举出的这个学英语的例子,其实就是一个由原程序经过某种机制转换,把它变成目标语言的过程。也就是
编译器就是一个翻译官的角色,它负责把源程序的语法翻译成目标程序能够理解的语法。
回到计算机中,我们肯定需要目标程序来做一些事情的。
也就是,我们通过某个渠道获得的输入信息,会经过编译器的转换,变为输出信息进行展示。
除了编译器之外,还有一种称为 解释器(interpreter)
的语言处理器,它不是做翻译工作的,而是把用户提供的输入执行源程序中指定的操作。