摘要:為通用語(yǔ)言設(shè)計(jì)解釋器的想法可能令人畏懼。但是,典型的解釋器擁有簡(jiǎn)潔的通用結(jié)構(gòu)兩個(gè)可變的遞歸函數(shù),第一個(gè)求解環(huán)境中的表達(dá)式,第二個(gè)在參數(shù)上調(diào)用函數(shù)。這一章接下來(lái)的兩節(jié)專注于遞歸函數(shù)和數(shù)據(jù)結(jié)構(gòu),它們是理解解釋器設(shè)計(jì)的基礎(chǔ)。
3.1 引言
來(lái)源:3.1 Introduction
譯者:飛龍
協(xié)議:CC BY-NC-SA 4.0
第一章和第二章描述了編程的兩個(gè)基本元素:數(shù)據(jù)和函數(shù)之間的緊密聯(lián)系。我們看到了高階函數(shù)如何將函數(shù)當(dāng)做數(shù)據(jù)操作。我們也看到了數(shù)據(jù)可以使用消息傳遞和對(duì)象系統(tǒng)綁定行為。我們已經(jīng)學(xué)到了組織大型程序的技巧,例如函數(shù)抽象,數(shù)據(jù)抽象,類的繼承,以及泛用函數(shù)。這些核心概念構(gòu)成了堅(jiān)實(shí)的基礎(chǔ),來(lái)構(gòu)建模塊化,可維護(hù)和可擴(kuò)展的程序。
這一章專注于編程的第三個(gè)基本元素:程序自身。Python 程序只是文本的集合。只有通過解釋過程,我們才可以基于文本執(zhí)行任何有意義的計(jì)算。類似 Python 的編程語(yǔ)言很實(shí)用,因?yàn)槲覀兛梢远x解釋器,它是一個(gè)執(zhí)行 Python 求值和執(zhí)行過程的程序。把它看做編程中最基本的概念并不夸張。解釋器只是另一個(gè)程序,它確定編程語(yǔ)言中表達(dá)式的意義。
接受這一概念,需要改變我們自己作為程序員的印象。我們需要將自己看做語(yǔ)言的設(shè)計(jì)者,而不只是由他人設(shè)計(jì)的語(yǔ)言用戶。
3.1.1 編程語(yǔ)言實(shí)際上,我們可以將許多程序看做一些語(yǔ)言的解釋器。例如,上一章的約束傳播器擁有自己的原語(yǔ)和組合方式。約束語(yǔ)言是十分專用的:它提供了一種聲明式的方式來(lái)描述數(shù)學(xué)關(guān)系的特定種類,而不是一種用于描述計(jì)算的完全通用的語(yǔ)言。雖然我們已經(jīng)設(shè)計(jì)了某種語(yǔ)言,這章的材料會(huì)極大擴(kuò)展我們可解釋的語(yǔ)言范圍。
編程語(yǔ)言在語(yǔ)法結(jié)構(gòu)、特性和應(yīng)用領(lǐng)域上差別很大。在通用編程語(yǔ)言中,函數(shù)定義和函數(shù)調(diào)用的結(jié)構(gòu)無(wú)處不在。另一方法,存在不包含對(duì)象系統(tǒng)、高階函數(shù)或類似while和for語(yǔ)句的控制結(jié)構(gòu)的強(qiáng)大的編程語(yǔ)言。為了展示語(yǔ)言可以有多么不同,我們會(huì)引入Logo作為強(qiáng)大并且具有表現(xiàn)力的編程語(yǔ)言的例子,它包含非常少的高級(jí)特性。
這一章中,我們會(huì)學(xué)習(xí)解釋器的設(shè)計(jì),以及在執(zhí)行程序時(shí),它們所創(chuàng)建的計(jì)算過程。為通用語(yǔ)言設(shè)計(jì)解釋器的想法可能令人畏懼。畢竟,解釋器是執(zhí)行任何可能計(jì)算的程序,取決于它們的輸入。但是,典型的解釋器擁有簡(jiǎn)潔的通用結(jié)構(gòu):兩個(gè)可變的遞歸函數(shù),第一個(gè)求解環(huán)境中的表達(dá)式,第二個(gè)在參數(shù)上調(diào)用函數(shù)。
這些函數(shù)都是遞歸的,因?yàn)樗鼈兓ハ喽x:調(diào)用函數(shù)需要求出函數(shù)體的表達(dá)式,而求出表達(dá)式可能涉及到調(diào)用一個(gè)或多個(gè)函數(shù)。這一章接下來(lái)的兩節(jié)專注于遞歸函數(shù)和數(shù)據(jù)結(jié)構(gòu),它們是理解解釋器設(shè)計(jì)的基礎(chǔ)。這一章的結(jié)尾專注于兩個(gè)新的編程語(yǔ)言,以及為其實(shí)現(xiàn)解釋器的任務(wù)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/38162.html
摘要:另一個(gè)賦值語(yǔ)句將名稱關(guān)聯(lián)到出現(xiàn)在莎士比亞劇本中的所有去重詞匯的集合,總計(jì)個(gè)。表達(dá)式是一個(gè)復(fù)合表達(dá)式,計(jì)算出正序或倒序出現(xiàn)的莎士比亞詞匯集合。在意圖上并沒有按照莎士比亞或者回文來(lái)設(shè)計(jì),但是它極大的靈活性讓我們用極少的代碼處理大量文本。 1.1 引言 來(lái)源:1.1 Introduction 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 計(jì)算機(jī)科學(xué)是一個(gè)極其寬泛的學(xué)科。全球的分布...
摘要:對(duì)象表示信息,但是同時(shí)和它們所表示的抽象概念行為一致。通過綁定行為和信息,對(duì)象提供了可靠獨(dú)立的日期抽象。名稱來(lái)源于實(shí)數(shù)在中表示的方式浮點(diǎn)表示。另一方面,對(duì)象可以表示很大范圍內(nèi)的分?jǐn)?shù),但是不能表示所有有理數(shù)。 2.1 引言 來(lái)源:2.1 Introduction 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 在第一章中,我們專注于計(jì)算過程,以及程序設(shè)計(jì)中函數(shù)的作用。我們看到了...
摘要:序列不是特定的抽象數(shù)據(jù)類型,而是不同類型共有的一組行為。不像抽象數(shù)據(jù)類型,我們并沒有闡述如何構(gòu)造序列。這兩個(gè)選擇器和一個(gè)構(gòu)造器,以及一個(gè)常量共同實(shí)現(xiàn)了抽象數(shù)據(jù)類型的遞歸列表。 2.3 序列 來(lái)源:2.3 Sequences 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 序列是數(shù)據(jù)值的順序容器。不像偶對(duì)只有兩個(gè)元素,序列可以擁有任意(但是有限)個(gè)有序元素。 序列在計(jì)算機(jī)科學(xué)中...
摘要:程序用于在編程社群的成員之間交流這些想法。在編程中,我們處理兩種元素函數(shù)和數(shù)據(jù)。在中,我們可以使用賦值語(yǔ)句來(lái)建立新的綁定,它包含左邊的名稱和右邊的值。例如,它并不能處理賦值語(yǔ)句。這些圖解的必要部分是函數(shù)的表示。 1.2 編程元素 來(lái)源:1.2 The Elements of Programming 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 編程語(yǔ)言是操作計(jì)算機(jī)來(lái)執(zhí)行任務(wù)...
摘要:消息向迭代器獲取所表示的底層序列的下一個(gè)元素。為了對(duì)方法調(diào)用做出回應(yīng),迭代器可以執(zhí)行任何計(jì)算來(lái)獲取或計(jì)算底層數(shù)據(jù)序列的下一個(gè)元素。這個(gè)迭代器應(yīng)擁有方法,依次返回序列中的每個(gè)元素,最后到達(dá)序列末尾時(shí)產(chǎn)生異常。 第五章 序列和協(xié)程 來(lái)源:Chapter 5: Sequences and Coroutines 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 5.1 引言 在這一章中,我...
閱讀 1066·2021-11-22 15:33
閱讀 3375·2021-11-08 13:20
閱讀 1391·2021-09-22 10:55
閱讀 2060·2019-08-29 11:08
閱讀 783·2019-08-26 12:24
閱讀 3079·2019-08-23 17:15
閱讀 2242·2019-08-23 16:12
閱讀 1946·2019-08-23 16:09