![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
自制编译器及虚拟机
Java蜗牛
这个作者很懒,什么都没留下…
展开
-
自制编译器-语言语法
在翻译完CUCU编译器的三篇文章之后,一直有自己尝试去写个编译器的念头,最近的课余时间暂且搁置JOS实验,尝试自己写个编译器,然后若仅仅是个编译器则所做之事未免和CUCU太雷同了,因此除了编译器之外还打算写一个简单的运行时让编译器编译出的程序跑在这个运行时里,就像JAVA那般。手上的参考资料有:龙书三(紫龙书)、深入理解JAVA虚拟机、自己翻译的3篇博客,尽量不去翻阅其它资料。所有原创 2014-10-06 10:34:38 · 661 阅读 · 0 评论 -
自制编译器:语法分析器
感觉语法分析器在编译器前端是一个较为庞大的东西,因此打算分两篇博客来描述,第一篇着重描述思想,第二篇具体论述实现。 1、语法分析器要做什么在编写任何一个东西的的时候,都要先弄明白这个玩意儿是做什么的,接受什么输入,产生什么输出。一个语法分析器要接受词法分析器所产生的词素作为输入,产生一个抽象语法树给中间代码生成器,然后再由中间代码生成器生成中间代码并递交给编译器后端原创 2014-10-06 10:39:14 · 1866 阅读 · 0 评论 -
自制编译器:静态检查
因为语法树的构建是从左到右逐渐扫描词法分析器所提供的词素,所以当某些情况下我们需要整个语法树的信息来判断程序本身是否有问题,就没法把这个判断过程放在语法树的分析中进行。虽然这个说法有点抽象和笼统,简而言之就是我们需要构建完语法树之后,再重新审视整个语法树并修改其中的某些节点,我们把这个过程称作为静态(编译期)的检查过程。本篇主要讲述显而易见的3个静态检查的例子:函数调用检查、表达式类型回填原创 2014-10-06 10:40:34 · 533 阅读 · 0 评论 -
自制编译器:后端代码生成
所谓的编译器后端的作用就是将语法树翻译成目标机器码。所谓目标机器码,考虑到直接翻译成具体平台(如X86,ARM等)过于复杂,因此先设计一个虚拟机,并翻译成这个虚拟机的机器码。对于虚拟机以及其指令格式可参考这篇文章http://blog.csdn.net/roger__wong/article/details/8947720,如何去尝试实现这个虚拟机是在我的另外一个系列的博客里进行论述。原创 2014-10-06 10:42:38 · 1630 阅读 · 0 评论 -
自制Runtime:虚拟执行环境设计
编译器前端基本设计已经完成(详见我的自制编译器系列博文),但在考虑编译器后端之前,首先要考虑代码的运行环境,因此考虑再三我便把制作Runtime的过程写成博文,记录从中所学到的知识。Runtime的设计以JVM为原型,加以部分的简化来去掉复杂的功能,并使得简单的Runtime可以在不多的代码行数内加以实现。总的来说我们的Runtime需要实现以下几个功能:1、运行特定的程序原创 2014-10-06 10:38:20 · 567 阅读 · 0 评论 -
自制编译器:词法分析器
词法分析器代码已上传到个人资源中。当我们的程序源文件进入编译器,首先遇到的就是词法分析器。词法分析器的作用就是解析源文件,分析出其中的词素,并把这个词素的顺序集输入给语法分析器。接上篇把所谓的词素也就是终结符号列出来:if else while ( ) { } cpreop bitop logiop armtcop number literal id NUL原创 2014-10-06 10:35:34 · 840 阅读 · 0 评论