摘要:作为本系列的第一章,将考虑从何开始下手。运行环境解释执行编译器产生的目标代码。从零开始写个编译器吧从何处下手的博客
作为本系列的第一章,将考虑从何开始下手。既然写的是编译器,那在此得明确编译器长什么样子,进一步,编译器由哪几部分构成,其工作原理大概是怎样的。了解了这些,才好下手。
简单来说,编译器本身是一个程序,这个程序能将一种代码(源代码)翻译成另一种代码(目标代码)。简而言之就是如下图。
而本系列中设计出来以供编译的语言——tao 语言,也就扮演着“源代码”的角色。
而编译器,会将 tao 语言编译成目标代码以供执行。那么,是何种目标代码呢?实际上我并没有打算写一个直接生成可执行程序的编译器,换句话说,该编译器生成的目标代码不可以直接(在操作系统上)运行。因此,我需要为 tao 语言创造一个运行环境。
相对于之第一张图,第二张图多了tao runtime environment 这个东东。这即是 tao 语言的运行环境。目标代码将在此运行环境上解释执行。
但是,tao 语言作为一门语言,还必须要配一个标准库。为此,在图中加上标准库,便有了如下图。
至此,我们的任务也就清晰的呈现在眼前了。如果我们想让世界上出现一门叫做 tao 语言的新语言,并且能让程序员用这种语言写的程序能顺利运行,我们至少要做出下面三个东西:
编译器:能将 tao 语言写的源代码编译成可供运行环境解释执行的目标代码。
运行环境:解释执行编译器产生的目标代码。
标准库:供 tao 语言的用户调用的类库。
从零开始写个编译器吧 - 从何处下手 - moskize 的博客
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/64217.html
摘要:是的,这个系列将呈现一个完整的编译器从无到有的过程。但在写这个编译器的过程中,我可不会偷工减料,该有的一定会写上的。该语言的虚拟机将运行于之上,同时编译器将使用实现。我早有写编译器的想法之前没写过,故希望一边写编译器一边完成这个系列。 是的,这个系列将呈现一个完整的编译器从无到有的过程。当然,为了保证该系列内容的简洁(也为了降低难度),仅仅保证编译器的最低要求,即仅能用。但在写这个编译...
摘要:自然,我们还是先从语言的编译器下手吧。在动手写编译器之前,得容我将编译器的结构进行进一步的划分。这些将被语法分析器接收并进行进一步处理。由于本系列将着重于写出编译器,必要的理论和概念还是会交代的。从零开始写个编译器吧编译器的结构的博客 自然,我们还是先从 tao 语言的编译器下手吧。在动手写编译器之前,得容我将编译器的结构进行进一步的划分。编译器可视为一个黑盒,从其一端输入源代码,另一...
摘要:各位抱歉了,这个系列在多个平台的专栏上连载。所以,我把从零开始写个编译器吧弄到了上。以后更新也是先从上开始。从零开始写歌编译器吧更及时的信息可以从我的公众号上获得虽然不怎么写公众号,但是还是挂一下吧 各位抱歉了,这个系列在多个平台的专栏上连载。每发一个新章节,都要同步到各个专栏上,于是可能漏掉 Segmentfault 的博客。汗,其实 Segmentfault 这边已经落后很久了。 ...
摘要:词法分析器本身就是一个状态机,生成这个状态机有很多种方法,而我打算采取手写的方式。状态机不断从源代码即一个字符串中读入一个一个字符,读到不同的字符将使状态机的状态从一个状态变化到另外一个状态。 词法分析器 Tokenizer 本身就是一个状态机,生成这个状态机有很多种方法,而我打算采取手写的方式。因为 tao 语言的词法还是相对比较简单的,手写不成问题。 先新建一个LexicalAna...
摘要:在之前的章节第章从零开始写个编译器吧开始写词法分析器中我有说,我将函数设计成主动调用的形式,而则是被动调用的形式。接下来本系列将进入编写语法分析器的阶段,不过在此之前,我将抽出一点时间介绍一下语言本身。 上周周末旅游去了,就没更新了,虽然回到海拔0m的地区,不过目前似乎还在缺氧,所以本次就少更点吧。 这章将结束词法分析的部分。 在之前的章节(第7章从零开始写个编译器吧 - 开始写词...
阅读 1504·2021-11-16 11:44
阅读 7165·2021-09-22 15:00
阅读 4356·2021-09-02 10:20
阅读 1866·2021-08-27 16:20
阅读 2318·2019-08-26 14:00
阅读 2878·2019-08-26 11:44
阅读 1539·2019-08-23 18:33
阅读 1812·2019-08-22 17:28