解析器和编译器它们在功能上是不一样的,然而从结构上看却有诸多相同,而且在开发时也并没有本质上的差别,这导致很多人有时很容易混淆两者。但是有可能某一个闲下来的时刻还是会想知道,作为一个菜鸡程序员我经过一番搜索有了一些个人理解,在此记录下来和大家分享。
用比较正式的解释来说,读入源语言后,解释器和编译器都要进行词法分析、语法分析和语义分析,之后,二者开始有所分别。解释器在语义分析后选择了直接执行语句;编译器在语义分析后选择将将语义存储成某一种中间语言,之后通过不同的后端翻译成不同的机器语言(即可执行程序)。而如果通俗一点可以举个不太恰当但是具象的例子:假如两个程序员同事猿A和猿C在某一天都在加班赶工期,到晚上的时候两人都感觉饿了想买点夜宵吃,猿A下楼去楼下商店买了一桶方便面,猿A吃面时觉得太单调了又下楼买了几根火腿肠,猿A吃完后觉得口渴便下楼去买了瓶水,而猿C则打开外卖软件将想买的水、食物等列好清单备注,便由外卖小哥一起送上来了。猿A如同解释器,做得时候直接做想到什么做什么,猿C就像编译器将要做的事情全部存储在中间设备(备注)上,由平台(外卖小哥)执行,这样执行效率更高。当然实际运行的时候会有更详细复杂的不同,这个例子可能不够贴切。如有谬误还望大佬们指正。