人人都能读懂的编译器原理 2018/11/01 · IT技术 · 2 条评论
理解编译器内部原理,可以让你更高效利用它。按照编译的工作顺序,逐步深入编程语言和编译器是怎样工作的。本文有大量的链接、样例代码和图表帮助你理解编译器。
阅读全文 »
词法分析器的实现 2016/12/13 · IT技术 · 1 条评论
编译,简单的说,就是把源程序转换为可执行程序。在这个过程中,编译器做了很多重要的工作。对底层该兴趣的我,自然的,也就迫切想搞清楚编译的内部实现,也就是编译的原理。这篇文章主要说的是编译器前端,词法分析器的原理,最后会给出一个词法分析器的简单实现。
从 Hello World 说程序运行机制 2016/12/11 · IT技术
学习任何一门编程语言,都会从hello world 开始。对于一门从未接触过的语言,在短时间内我们都能用这种语言写出它的hello world。然而,对于hello world 这个简单程序的内部运行机制,我相信还有很多人都不是很清楚。hello world 这些信息是如何通显示器过显示的?
手把手教你做一个 C 语言编译器(9):总结 2016/01/22 · C/C++, 开发 · 7 条评论
恭喜你完成了自己的 C 语言编译器,本章中我们发一发牢骚,说一说编写编译器值得注意的一些问题;编写编译器时遇到的一些难题。
手把手教你做一个 C 语言编译器(8):表达式 2016/01/22 · C/C++, 开发 · 1 条评论
整个编译器还剩下最后两个部分:语句和表达式的解析。它们的内容比较多,主要涉及如何将语句和表达式编译成汇编代码。这章讲解语句的解析,相对于表达式来说它还是较为容易的。
手把手教你做一个 C 语言编译器(7):语句 2016/01/21 · C/C++, 开发
手把手教你做一个 C 语言编译器(6):函数定义 2016/01/21 · C/C++, 开发 · 1 条评论
由于语法分析本身比较复杂,所以我们将它拆分成 3 个部分进行讲解,分别是:变量定义、函数定义、表达式。本章讲解函数定义相关的内容。
手把手教你做一个 C 语言编译器(5):变量定义 2016/01/20 · C/C++, 开发
本章中我们用 EBNF 来大致描述我们实现的 C 语言的文法,并实现其中解析变量定义部分。由于语法分析本身比较复杂,所以我们将它拆分成 3 个部分进行讲解,分别是:变量定义、函数定义、表达式。
手把手教你做一个 C 语言编译器(4):递归下降 2016/01/20 · C/C++, 开发 · 2 条评论
传统上,编写语法分析器有两种方法,一种是自顶向下,一种是自底自上。自顶向下是从起始非终结符开始,不断地对非终结符进行分解,直到匹配输入的终结符;自底向上是不断地将终结符进行合并,直到合并成起始的非终结符。
手把手教你做一个 C 语言编译器(3):词法分析器 2016/01/19 · C/C++, 开发 · 7 条评论
什么是词法分析器?简而言之,词法分析器用于对源码字符串做预处理,以减少语法分析器的复杂程度。词法分析器以源码字符串为输入,输出为标记流(token stream),即一连串的标记,每个标记通常包括: (token, token value) 即标记本身和标记的值。
手把手教你做一个 C 语言编译器(2):虚拟机 2016/01/19 · C/C++, 开发 · 10 条评论
本章是“手把手教你构建 C 语言编译器”系列的第三篇,本章我们要构建一台虚拟的电脑,设计我们自己的指令集,运行我们的指令集,说得通俗一点就是自己实现一套汇编语言。它们将作为我们的编译器最终输出的目标代码。
手把手教你做一个 C 语言编译器(1):设计 2016/01/18 · C/C++, 开发
本章是“手把手教你构建 C 语言编译器”系列的第二篇,我们要从整体上讲解如何设计我们的 C 语言编译器。首先要说明的是,虽然标题是编译器,但实际上我们构建的是 C 语言的解释器,这意味着我们可以像运行脚本一样去运行 C 语言的源代码文件。
手把手教你做一个 C 语言编译器(0):前言 2016/01/18 · C/C++, 开发 · 1 条评论
“手把手教你构建 C 语言编译器” 这一系列教程将带你从头编写一个 C 语言的编译器。希望通过这个系列,我们能对编译器的构建有一定的了解,同时,我们也将构建出一个能用的 C 语言编译器,尽管有许多语法并不支持。
一起来写个简单的解释器(6) 2015/11/27 · 开发 · 2 条评论
今天是个好日子 :) 你可能会问:“为什么?”。原因是今天我们会在文法中添加括号表达式和实现可以计算像 7 + 3 * (10 / (12 / (3 + 1) – 1)) 这样任意深度嵌套的括号表达式的解释器,然后结束关于算术表达式的讨论(好吧,差不多)。
一起来写个简单的解释器(5):加减乘除表达式 2015/11/16 · 开发
如何创建一个解释器或编译器这么复杂的问题,你会如何处理呢?开始的时候它很像是一团乱糟糟的毛线,你得重新梳理展开,然后缠成一个完美的毛线球 。达到上述目的的方法只需一次解开一根线、一个结。
一起来写个简单的解释器(4):任意数量的乘法和除法 2015/11/14 · 开发
在上一篇文章中,你已经学会了如何解析(识别)和解释带有任意数量加法或减法运算符的算术表达式。本文你将会学习如何解析(识别)和解释带有任意数量乘法或者除法运算符的算术表达式。
第一个 C 语言编译器是怎样编写的? 2015/11/10 · C/C++, 开发 · 3 条评论
当今几乎所有的实用的编译器/解释器(以下统称编译器)都是用C语言编写的,有一些语言比如Clojure,Jython等是基于JVM或者说是用Java实现的,IronPython等是基于.NET实现的,但是Java和C#等本身也要依靠C/C++来实现,等于是间接调用了调用了C。所以衡量某种高级语言的可移植性其实就是在讨论ANSI/ISO C的移植性。
Go语言内幕(2):深入 Go 编译器 2015/09/14 · Go, 开发 · 1 条评论
让我们更加深入探索 Go 编译器:创建一个简单的 Go 程序来看一下 Go 内部在类型转换时到底做了哪些工作。通过这个例子,我会解释结点树是如何生成并被使用的。同样地,你也可以将这篇博客的知识应用到其它 Go 编译器特征的研究中。
一起来写个简单的解释器(3):任意数量的加法和减法 2015/08/27 · 开发
今早起来我就想:“为什么我们学习一项新技能这么困难?”。以游泳为例。你可以花很多时间去看很多游泳书,和教练聊上几个小时,看培训视频,然而在你第一次跳进游泳池时,你仍然会像石头一样往下沉。
本系列第三篇,将介绍关于如何解析和解释带有任意数量加法或减法运算符的算术表达式。
一起来写个简单的解释器(2):两个整数相加或相减 2015/07/22 · 开发 · 1 条评论
“如果你仅仅学习方法,那么你将被方法所束缚。但是如果你学习原理,你将能够设计自己的方法。”
在第一部分,我们学习了两个重要的概念,那就是 token(记号) 和 lexical analyzer(词法分析器)。第二篇我们来浅谈一下 lexeme、parsing 和 parser。
0 克劳德·香农(信息论之父):天才的...
1 Python 中星号的本质及其使用方式
.Net Android App Bug C++ C sharp CSS C语言 Facebook featuredpost Git Github Go Google Hadoop HTML5 iOS IT java Javascript jQuery Linux MySQL Nginx Node.js NoSQL php Python Redis shell soho SQL SQL Server UI UI设计 Vim Web Web开发 书籍 互联网 交互设计 产品 产品经理 代码 分布式 创业 前端 团队 大数据 女程序员 威客 学习 安全 安卓开发 客户 屌程 工具 工程师 开发人员 开源 微软 技术面试 招聘 效率 教程 数学 数据库 数据结构 时间管理 服务器 机器学习 架构 测试 浏览器 游戏 用户 用户体验 界面 码农故事 移动应用 移动端 程序员 算法 管理 编程 编程语言 网站 网页设计 职场 自由职业 苹果 设计 设计师 设计模式 趣文 软件开发 重构 面试 项目经理 黑客
密码明文存入 log?Twitter 程序员可能要被祭天了 2018/05/04 · 82 · 3
地址 1.1.1.1,Cloudflare 推新公共 DNS 服务 2018/04/02 · 67 · 6
安卓用 Java 侵犯甲骨文版权,谷歌或赔 88 亿美元 2018/03/28 · 80 · 3
李文星家属诉 BOSS直聘:哪怕赔一分 能给个交代也值 2018/03/27 · 128 · 4
为防止员工加班,韩国政府规定20点必须关闭电脑 2018/03/28 · 33
mlpack: 一个C++机器学习库 C++, 机器学习
Whitewidow:SQL 漏洞自动扫描工具 数据库 · 4
Caffe:一个深度学习框架 机器学习 · 3
静态代码分析工具清单:公司篇 静态代码分析
HotswapAgent:支持无限次重定义运行时类与资源 开发流程增强工具