摘要:为通用语言设计解释器的想法可能令人畏惧。但是,典型的解释器拥有简洁的通用结构两个可变的递归函数,第一个求解环境中的表达式,第二个在参数上调用函数。这一章接下来的两节专注于递归函数和数据结构,它们是理解解释器设计的基础。
3.1 引言
来源:3.1 Introduction
译者:飞龙
协议:CC BY-NC-SA 4.0
第一章和第二章描述了编程的两个基本元素:数据和函数之间的紧密联系。我们看到了高阶函数如何将函数当做数据操作。我们也看到了数据可以使用消息传递和对象系统绑定行为。我们已经学到了组织大型程序的技巧,例如函数抽象,数据抽象,类的继承,以及泛用函数。这些核心概念构成了坚实的基础,来构建模块化,可维护和可扩展的程序。
这一章专注于编程的第三个基本元素:程序自身。Python 程序只是文本的集合。只有通过解释过程,我们才可以基于文本执行任何有意义的计算。类似 Python 的编程语言很实用,因为我们可以定义解释器,它是一个执行 Python 求值和执行过程的程序。把它看做编程中最基本的概念并不夸张。解释器只是另一个程序,它确定编程语言中表达式的意义。
接受这一概念,需要改变我们自己作为程序员的印象。我们需要将自己看做语言的设计者,而不只是由他人设计的语言用户。
3.1.1 编程语言实际上,我们可以将许多程序看做一些语言的解释器。例如,上一章的约束传播器拥有自己的原语和组合方式。约束语言是十分专用的:它提供了一种声明式的方式来描述数学关系的特定种类,而不是一种用于描述计算的完全通用的语言。虽然我们已经设计了某种语言,这章的材料会极大扩展我们可解释的语言范围。
编程语言在语法结构、特性和应用领域上差别很大。在通用编程语言中,函数定义和函数调用的结构无处不在。另一方法,存在不包含对象系统、高阶函数或类似while和for语句的控制结构的强大的编程语言。为了展示语言可以有多么不同,我们会引入Logo作为强大并且具有表现力的编程语言的例子,它包含非常少的高级特性。
这一章中,我们会学习解释器的设计,以及在执行程序时,它们所创建的计算过程。为通用语言设计解释器的想法可能令人畏惧。毕竟,解释器是执行任何可能计算的程序,取决于它们的输入。但是,典型的解释器拥有简洁的通用结构:两个可变的递归函数,第一个求解环境中的表达式,第二个在参数上调用函数。
这些函数都是递归的,因为它们互相定义:调用函数需要求出函数体的表达式,而求出表达式可能涉及到调用一个或多个函数。这一章接下来的两节专注于递归函数和数据结构,它们是理解解释器设计的基础。这一章的结尾专注于两个新的编程语言,以及为其实现解释器的任务。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/38162.html
摘要:另一个赋值语句将名称关联到出现在莎士比亚剧本中的所有去重词汇的集合,总计个。表达式是一个复合表达式,计算出正序或倒序出现的莎士比亚词汇集合。在意图上并没有按照莎士比亚或者回文来设计,但是它极大的灵活性让我们用极少的代码处理大量文本。 1.1 引言 来源:1.1 Introduction 译者:飞龙 协议:CC BY-NC-SA 4.0 计算机科学是一个极其宽泛的学科。全球的分布...
摘要:对象表示信息,但是同时和它们所表示的抽象概念行为一致。通过绑定行为和信息,对象提供了可靠独立的日期抽象。名称来源于实数在中表示的方式浮点表示。另一方面,对象可以表示很大范围内的分数,但是不能表示所有有理数。 2.1 引言 来源:2.1 Introduction 译者:飞龙 协议:CC BY-NC-SA 4.0 在第一章中,我们专注于计算过程,以及程序设计中函数的作用。我们看到了...
摘要:序列不是特定的抽象数据类型,而是不同类型共有的一组行为。不像抽象数据类型,我们并没有阐述如何构造序列。这两个选择器和一个构造器,以及一个常量共同实现了抽象数据类型的递归列表。 2.3 序列 来源:2.3 Sequences 译者:飞龙 协议:CC BY-NC-SA 4.0 序列是数据值的顺序容器。不像偶对只有两个元素,序列可以拥有任意(但是有限)个有序元素。 序列在计算机科学中...
摘要:程序用于在编程社群的成员之间交流这些想法。在编程中,我们处理两种元素函数和数据。在中,我们可以使用赋值语句来建立新的绑定,它包含左边的名称和右边的值。例如,它并不能处理赋值语句。这些图解的必要部分是函数的表示。 1.2 编程元素 来源:1.2 The Elements of Programming 译者:飞龙 协议:CC BY-NC-SA 4.0 编程语言是操作计算机来执行任务...
摘要:消息向迭代器获取所表示的底层序列的下一个元素。为了对方法调用做出回应,迭代器可以执行任何计算来获取或计算底层数据序列的下一个元素。这个迭代器应拥有方法,依次返回序列中的每个元素,最后到达序列末尾时产生异常。 第五章 序列和协程 来源:Chapter 5: Sequences and Coroutines 译者:飞龙 协议:CC BY-NC-SA 4.0 5.1 引言 在这一章中,我...
阅读 1047·2021-11-22 15:33
阅读 3357·2021-11-08 13:20
阅读 1367·2021-09-22 10:55
阅读 2052·2019-08-29 11:08
阅读 770·2019-08-26 12:24
阅读 3067·2019-08-23 17:15
阅读 2224·2019-08-23 16:12
阅读 1932·2019-08-23 16:09