原文地址:Let’s Build A Simple Interpreter. Part 9.
我记得当我还在大学时(很久以前)学习系统编程,我相信唯一“真正”的语言就是汇编和 C。 而 Pascal 则是──怎么说得好听点──非常高级的语言,被不想知道底层工作方式的应用程序 开发者使用。
我那时一点也不知道我为了付账单而写几乎所有东西会是用 Python (且喜欢它的所有一 切),以及我会因为在本系列第一篇文章中提到的原因写一个 Pascal 解释器和编译器。
原文地址:Let’s Build A Simple Interpreter. Part 9.
我记得当我还在大学时(很久以前)学习系统编程,我相信唯一“真正”的语言就是汇编和 C。 而 Pascal 则是──怎么说得好听点──非常高级的语言,被不想知道底层工作方式的应用程序 开发者使用。
我那时一点也不知道我为了付账单而写几乎所有东西会是用 Python (且喜欢它的所有一 切),以及我会因为在本系列第一篇文章中提到的原因写一个 Pascal 解释器和编译器。
原文地址:Let’s Build A Simple Interpreter. Part 8.
今天我们会讨论 一元操作符, 也就是一元加(+)/减(-)操作符。
今天的很多材料都是基于前一篇文章中的内容,所以如果你需要复习的话,就回到第七部分 再来一遍。记住:重复是学习之母。
闲话说完,以下是今天要做的事:
原文地址:Let’s Build A Simple Interpreter. Part 7.
像我上次承诺的那样,今天我会讨论一个本系列余下文章中都会用到的重要数据结构,系好 安全带让我们出发。
直到现在,我们都把 interpreter 的代码和 parser 的代码混在一起,且 interpreter 在 parser 识别出一个如加减乘除之类的语言结构之后会立刻对它进行求值。这种 interpreter 被称为 语法导向解释器 (syntax-directed interpreter)。他们通常在输 入上做一个 pass 且只适合基础的语言应用。为了分析更复杂的编程语言 Pascal 的结构, 我们需要建立一个 中间表示 (intermediate representation, IR)。我们的 parser 会 负责构建 IR 而 interpreter 会用来解释由 IR 所代表的输入。
原文地址:Let’s Build A Simple Interpreter. Part 6.
今天是很重要的一天:)“为什么?”你可能会问。原因是今天我们会结束关于算术表达式的 讨论(好吧,基本结束),给我们的语法中加入括号,实现可以对嵌套任意层括号的表达式 进行求值,比如 7 + 3 * (10 / (12 / (3 + 1) - 1)).
原文地址:Let’s Build A Simple Interpreter. Part 5.
怎么解决像怎么创建一个解释器或编译器这样复杂的问题呢?起初这个问题看上去像是需要 把一个乱糟糟的线团解成一个完美的线球。
方法其实就是一条线、一个结地解。尽管有时你可能会觉得你不会立即理解某一点,但你一 定要继续前进。如果你足够坚持,最终一定会“开窍”的,我保证(天呐,如果我每次不能马 上理解一件事都存25美分的话早就成富人了:)。
原文地址:Let’s Build A Simple Interpreter. Part 4.
你是被动地学习这些文章中的内容呢,还是主动地练习呢?我希望你在积极练习。真的:)
记得孔子说过什么吗?
听而易忘
原文地址:Let’s Build A Simple Interpreter. Part 3.
今天早上我醒来时想到:“为什么学习一项新技能这么困难呢?”
我不认为只是因为需要努力工作。我认为原因之一可能是我们花费了很多时间和精力通过阅 读和观察来获取知识,但没有花费足够的时间来通过练习把知识转化为技能。以游泳为例, 你可以花费很多时间阅读上百本关于游泳的书,跟有经验的游泳者和教练谈上数小时,观看 所有能找到的训练视频,但你第一次跃进泳池时仍然会像块石头一样沉下去。
原文地址:Let’s Build A Simple Interpreter. Part 2.
在《The 5 Elements of Effective Thinking》1这本令人惊叹的书中,作者 Burger 和 Starbird 分享了一个故事,讲述了他们如何观察国际知名小号演奏家 Tony Plog 为有 造诣的小号演奏家举办大师班。学生们首先演奏了复杂的音乐片段,他们演奏的很好。但随 后他们被要求演奏非常基础、简单的音符。当他们演奏这些音符时,和前面演奏的复杂片段 相比这些音符显得非常幼稚。当他们演奏完,大师也演奏了相同的音符,但他演奏时,这些 音符听上去并不幼稚。差别很惊人。Tony 解释说,掌握简单音符的演奏会使得对复杂作品 有更好的控制。这一课要传递的想法很清楚──要掌握真正的高超技艺,就必须专注于掌握简 单基础的概念。
原文地址:Let’s Build A Simple Interpreter. Part 1.
If you don't know how compilers work, then you don't know how computers work. If you're not 100% sure whether you know how compilers work, then you don't know how they work. – Steve Yegge
就是这样。仔细想想这事儿。不管你是新手还是有经验的软件开发者:如果你不知道编译器 或者解释器怎么工作,那么你就不知道计算机怎么工作。就这么简单。