
自制Compiler
文章平均质量分 79
ROger__Wong
这个作者很懒,什么都没留下…
展开
-
自制编译器:语法分析器(一)
感觉语法分析器在编译器前端是一个较为庞大的东西,因此打算分两篇博客来描述,第一篇着重描述思想,第二篇具体论述实现。 1、语法分析器要做什么在编写任何一个东西的的时候,都要先弄明白这个玩意儿是做什么的,接受什么输入,产生什么输出。一个语法分析器要接受词法分析器所产生的词素作为输入,产生一个抽象语法树给中间代码生成器,然后再由中间代码生成器生成中间代码并递交给编译器后端。当然在某些理解原创 2013-04-29 22:45:16 · 10987 阅读 · 1 评论 -
自制编译器:词法分析器
词法分析器代码已上传到个人资源中。当我们的程序源文件进入编译器,首先遇到的就是词法分析器。词法分析器的作用就是解析源文件,分析出其中的词素,并把这个词素的顺序集输入给语法分析器。接上篇把所谓的词素也就是终结符号列出来:if else while ( ) { } cpreop bitop logiop armtcop number literal id NUL new [ ] b原创 2013-04-21 23:03:49 · 3998 阅读 · 1 评论 -
自制编译器:语言语法
在翻译完CUCU编译器的三篇文章之后,一直有自己尝试去写个编译器的念头,最近的课余时间暂且搁置JOS实验,尝试自己写个编译器,然后若仅仅是个编译器则所做之事未免和CUCU太雷同了,因此除了编译器之外还打算写一个简单的运行时让编译器编译出的程序跑在这个运行时里,就像JAVA那般。手上的参考资料有:龙书三(紫龙书)、深入理解JAVA虚拟机、自己翻译的3篇博客,尽量不去翻阅其它资料。所有的代码均原创 2013-04-16 22:50:38 · 3438 阅读 · 1 评论 -
自制编译器:语法分析器(二)
这篇博文拖了好久才写完,其一是语法分析器本身的难度实在有点超出我的预料,以至于反复重构多次才完成,其二是因为弄了个xbox玩,占用了一部分的课余时间= =!。本篇博文将分为以下几个部分来描述一下语法分析器的具体实现,理论、部分典型节点与结果。一、语法制导翻译、LL与LL(X)语法、左递归等其它为什么要写一个语法分析器?语法分析器的作用不仅仅是来检查词素列表中的序列是否是一个我们原创 2013-05-16 23:13:42 · 18113 阅读 · 2 评论 -
自制编译器:静态检查
本篇博客说一说在语法树生成之后、后端代码生成之前所需要的一些必要检查工作,以及其实现的简单思路。因为语法树的构建是从左到右逐渐扫描词法分析器所提供的词素,所以当某些情况下我们需要整个语法树的信息来判断程序本身是否有问题,就没法把这个判断过程放在语法树的分析中进行。虽然这个说法有点抽象和笼统,简而言之就是我们需要构建完语法树之后,再重新审视整个语法树并修改其中的某些节点,我们把这个过程称作为静态原创 2013-06-11 17:50:30 · 2947 阅读 · 0 评论 -
自制编译器:后端代码生成(一)
后端早就已经弄的差不多了,因为学校论文的事情耽搁的比较久,一直到现在才发博客。所谓的编译器后端的作用就是将语法树翻译成目标机器码。所谓目标机器码,考虑到直接翻译成具体平台(如X86,ARM等)过于复杂,因此先设计一个虚拟机,并翻译成这个虚拟机的机器码。对于虚拟机以及其指令格式可参考这篇文章http://blog.youkuaiyun.com/roger__wong/article/details/89原创 2013-06-12 23:53:02 · 5815 阅读 · 1 评论 -
自制编译器:后端代码生成(二)
(8)stmtsstmts逻辑上代表一个语句块或一组语句块,对应的生成式和在节点中使用的type如下:stmts --> NUL| type-->0 stmt stmts| type-->1 if(expr) { stmts} stmts| type-->2原创 2013-06-15 14:41:39 · 2731 阅读 · 1 评论 -
自制编译器:后端代码生成(三)
(14)expr/* Type* expr --> (expr) 0 ids| 1 number| 2 literal| 3 func-原创 2013-06-16 13:39:50 · 3486 阅读 · 0 评论