
编译原理
文章平均质量分 85
西风逍遥游
这个作者很懒,什么都没留下…
展开
-
编译技术,从BNF范式到文法识别简介
今日漫谈的是编译技术,作为计算机科学中的皇后,一只是编程中最为关键的技术之一,但由于太过繁杂,往往不被一般开发者重视。但其实,它是计算机代码优美结构的基石,了解编译技术,往往能让你成为更加优秀的程序员。原创 2015-04-03 13:43:15 · 18235 阅读 · 5 评论 -
编译器架构的王者LLVM——(12)使用JIT引擎
LLVM从设计之初就考虑了解释执行的功能,这非常其作为一款跨平台的中间字节码来使用,可以方便地跨平台运行。又具有编译型语言的优势,非常的方便。我们使用的LLVM3.6版,移除了原版JIT,改换成了新版的MCJIT,性格有了不小的提升,本文就MCJIT的使用和注意事项,进行简要的介绍。原创 2016-01-08 20:17:04 · 14552 阅读 · 2 评论 -
编译器架构的王者LLVM——(11)深入理解GetElementPtr
LLVM平台,短短几年间,改变了众多编程语言的走向,也催生了一大批具有特色的编程语言的出现,不愧为编译器架构的王者,也荣获2012年ACM软件系统奖 —— 题记 LLVM平台,和C语言极为类似,强类型,需要复杂的指针操作,基于系统的符号调用等。而LLVM的指针操作指令,GetElementPtr,几乎是所有指针计算的关键,而理解它个运作原理,正确的使用,非常的重要。原创 2015-12-27 20:15:04 · 18452 阅读 · 3 评论 -
Elite语言-原创宏翻译语言
Elite语言-原创宏翻译语言最近一个月很忙,不过很高兴的是,经过这个月的努力,终于制作出了Elite语言的预览版。 Elite是我自行设计开发的一款宏翻译语言,主要使用场景是创建个性化领域专用语言(DSL)。github项目仓库:https://github.com/elite-lang/Elite. Elite是一款可自定语法的编程语言,通过自行配置语法,能够方便的定制需要的语言形式.原创 2015-12-22 07:18:13 · 2026 阅读 · 0 评论 -
编译器架构的王者LLVM——(10)变量的存储与读取
变量是一款编程语言中的核心,说编译语言是一种符号处理工具,其实是有些道理的。栈式符号表可以方便的记录编译过程中的变量和语法符号,我们上节已经了解了其中的实现方法。那么,还有没有其他的办法能够简单的实现变量的存取呢?原创 2015-11-20 19:59:45 · 6522 阅读 · 4 评论 -
编译器架构的王者LLVM——(9)栈式符号表的构建
栈式符号表对于一款编译器,无疑是核心的组件。无论你在做什么符号扫描,那么都离不开符号表,如何得知一个符号是否定义,以及它的类型,那么唯有查看符号表中的记录。栈式符号表并不复杂,但思想精妙,本文,将介绍一款栈式符号表的原理及简单构建。原创 2015-11-14 11:36:46 · 5919 阅读 · 1 评论 -
编译器架构的王者LLVM——(8)函数的调用及基本运算符
之前我们提到了函数的定义,那么,定义好的函数如何调用才行呢?本文重点介绍LLVM中函数调用的用法以及基本运算符的相关操作。原创 2015-11-14 10:32:10 · 5119 阅读 · 0 评论 -
编译器架构的王者LLVM——(7)函数的翻译方法
前面介绍了许多编译器架构上面的特点,如何组织语法树、如果多遍扫描语法树。今天开始,我们就要设计本编译器中最核心的部分了,如何设计一个编译时宏,再利用LLVM按顺序生成模块。原创 2015-11-11 09:29:52 · 3958 阅读 · 0 评论 -
编译器架构的王者LLVM——(6)多遍翻译的宏翻译系统
上次我们讨论了构建语法树的基本模型,我们能够利用Lex+Bison+Node,几个组件将我们的目标语法翻译成AST语法树了,在第四章,我们也给出了RedApple这款实现型小编译器的语法结构,那么我们的准备工作基于基本完成。我们在搞定了AST语法树的构建后,需要有一种机制,能够遍历整棵语法树,然后将其翻译为LLVM的一个模块,然后再输出成.bc字节码。原创 2015-11-10 13:14:38 · 18104 阅读 · 3 评论 -
编译器架构的王者LLVM——(5)语法树模型的基本结构
上次我们看了Lex和Yacc的翻译文件,可能一些朋友并不了解其中的执行部分,而且,对这个抽象语法树是怎么构建起来的还不清楚。今天我们就再详细介绍一下如果方便的构建一棵抽象语法树(AST)原创 2015-11-10 12:01:58 · 10106 阅读 · 0 评论 -
编译器架构的王者LLVM——(3)用代码生成代码
LLVM的开发思路很简单,就是用C++代码去不断生成llvm字节码原创 2015-11-06 20:56:50 · 11094 阅读 · 1 评论 -
编译器架构的王者LLVM——(1)现代编译器架构
LLVM平台,短短几年间,改变了众多编程语言的走向,也催生了一大批具有特色的编程语言的出现,不愧为编译器架构的王者,也荣获2012年ACM软件系统奖。原创 2015-11-06 18:45:29 · 10031 阅读 · 1 评论 -
编译器架构的王者LLVM——(4)简单的词法和语法分析
Lex和Yacc真是太好用了,非常方便我们构建一门语言的分析程序。今天我们就来了解一门语言的Lex和Bsion定义文件,如果制作一款合理的词法、语法分析器原创 2015-11-07 09:08:08 · 6859 阅读 · 0 评论 -
编译器架构的王者LLVM——(2)开发LLVM项目
LLVM作为一款非常方便的编译器开发平台,我们能用LLVM做一款自己的编程语言么?答案是,有点难度,但不是不可能,今天,就从配置项目工程开始,了解LLVM项目开发的一点一滴。原创 2015-11-06 19:43:31 · 7224 阅读 · 0 评论 -
创造新语言(3)——添加语义处理程序
好久没有更新了,主要是研究了一段时间的C++的面向对象的设计方式和更好的架构程序的思路。其实今天这部分代码早已完成,但希望能够更好的给大家讲解如何做一个可用的新编程语言。上次说到Bison的语义分析功能,但并没有添加对应的语义处理功能,我们这次就构建一个描述语法的抽象语法树。首先Bison的语义处理功能是十分方便的,只要在后面添加C++的语义动作代码就可以了原创 2015-05-12 10:31:35 · 1458 阅读 · 0 评论 -
创造新语言(1)——确定架构
最近写C代码很不爽,感觉很多地方十分冗余,希望能够改进一下,于是诞生了这个想法,利用学过的编译原理的前端知识,构建一门新语言的编译器,然后将新语言翻译成为标准的C89。这样,即保障了可用性,同时又大大减轻了后端的工作量,何乐而不为呢?原创 2015-04-13 23:16:12 · 2523 阅读 · 3 评论 -
创造新语言(2)——用Lex&Yacc构建简单的分析程序
昨天我们开始设计了一门新语言,制定了基本的开发架构,今天我们就先来了解一下,两个非常好用的工具,编译器前端构建的神器——Lex&Yacc,这两个工具在linux下叫做flex和bison。Lex是词法分析器构建工具,我们安装对应的词法规则书写,那么就能够为我们生成对应的词法分析器,自动帮我们分好token,而分词工作,一直是编译系统的基础任务。我们今天,先来尝试编写一个BNF语法的解析器。原创 2015-04-14 19:05:30 · 4357 阅读 · 0 评论 -
Lex识别C风格字符串和注释
Lex和Yacc是Unix下不错的词法分析器和语法分析器,在linux下,这两个工具被成为flex和bison,也是C++经常用来构建字符分析程序的工具。我们这里讨论一些其有趣的用法和注意的事项原创 2015-04-13 17:16:47 · 12205 阅读 · 6 评论 -
使用Sphinx翻译LLVM的中文文档
Sphinx是一款非常方便的文档生成工具,以前就早有耳闻,最近计划将LLVM的文档翻译一些,在打开LLVM的文档源文件后发现,整个文档部分整理的非常整洁。下载的最新版LLVM-3.8版的源码,已经完全使用Sphinx生成文档,于是我也学习了一些Sphinx的相关用法。原创 2016-04-17 23:05:41 · 3253 阅读 · 1 评论