語(yǔ)言設(shè)計(jì)問(wèn)題課件_第1頁(yè)
語(yǔ)言設(shè)計(jì)問(wèn)題課件_第2頁(yè)
語(yǔ)言設(shè)計(jì)問(wèn)題課件_第3頁(yè)
語(yǔ)言設(shè)計(jì)問(wèn)題課件_第4頁(yè)
語(yǔ)言設(shè)計(jì)問(wèn)題課件_第5頁(yè)
已閱讀5頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1第二章語(yǔ)言設(shè)計(jì)問(wèn)題感謝你的觀看2019年6月301第二章語(yǔ)言設(shè)計(jì)問(wèn)題感謝你的觀看2019年6月302語(yǔ)言設(shè)計(jì)考慮的因素早期的語(yǔ)言設(shè)計(jì)的目標(biāo)是希望程序能高效地運(yùn)行于昂貴的硬件上,因此,早期語(yǔ)言總是以翻譯成高效的機(jī)器碼為目標(biāo),即使程序難以書寫?,F(xiàn)在,硬件價(jià)格下降、軟件價(jià)格上升,更強(qiáng)調(diào)程序容易書寫,即使慢點(diǎn)也可。例如,ML的類型特性、C++的類、Ada的包(Package)均以降低執(zhí)行速度為代價(jià),但對(duì)保證程序正確性有幫助。開(kāi)發(fā)語(yǔ)言時(shí),有三個(gè)影響語(yǔ)言設(shè)計(jì)的主要因素:計(jì)算機(jī)本身在計(jì)算機(jī)上支持語(yǔ)言的執(zhí)行模型,即虛擬計(jì)算機(jī)語(yǔ)言所實(shí)現(xiàn)的計(jì)算模型感謝你的觀看2019年6月302語(yǔ)言設(shè)計(jì)考慮的因素早期的語(yǔ)言設(shè)計(jì)的目標(biāo)是希望程序能高效地運(yùn)3主要內(nèi)容計(jì)算機(jī)結(jié)構(gòu)與程序設(shè)計(jì)語(yǔ)言的關(guān)系結(jié)構(gòu)上的對(duì)應(yīng)關(guān)系對(duì)應(yīng)關(guān)系的實(shí)現(xiàn)手段程序的執(zhí)行模型:虛擬計(jì)算機(jī)虛擬機(jī)與程序語(yǔ)言實(shí)現(xiàn)的關(guān)系程序語(yǔ)言與虛擬機(jī)的綁定C/C++概述感謝你的觀看2019年6月303主要內(nèi)容計(jì)算機(jī)結(jié)構(gòu)與程序設(shè)計(jì)語(yǔ)言的關(guān)系感謝你的觀看201942.1計(jì)算機(jī)的結(jié)構(gòu)和操作一個(gè)計(jì)算機(jī)是能夠存儲(chǔ)和執(zhí)行程序的數(shù)據(jù)結(jié)構(gòu)和算法的集成集合。計(jì)算機(jī)可通過(guò)用電線、集成電路、電路板等構(gòu)造為實(shí)際的物理設(shè)備,此即實(shí)際計(jì)算機(jī)或稱硬件計(jì)算機(jī)。計(jì)算機(jī)也可以用運(yùn)行于其他計(jì)算機(jī)上的程序(或軟件)來(lái)構(gòu)造,此即軟件仿真計(jì)算機(jī)。程序設(shè)計(jì)語(yǔ)言的實(shí)現(xiàn)是通過(guò)一個(gè)翻譯器,將以語(yǔ)言書寫的程序翻譯為機(jī)器語(yǔ)言程序(可被某計(jì)算機(jī)直接執(zhí)行,該計(jì)算機(jī)可以是硬件計(jì)算機(jī),也可以為軟硬參雜的虛擬機(jī))。感謝你的觀看2019年6月3042.1計(jì)算機(jī)的結(jié)構(gòu)和操作一個(gè)計(jì)算機(jī)是能夠存儲(chǔ)和執(zhí)行程序的5計(jì)算機(jī)結(jié)構(gòu)與程序設(shè)計(jì)語(yǔ)言一個(gè)計(jì)算機(jī)包含6個(gè)主要部件,它們與程序設(shè)計(jì)語(yǔ)言的主要方面有著非常密切的對(duì)應(yīng)關(guān)系。1、數(shù)據(jù):提供各種可供操作的基本數(shù)據(jù)項(xiàng)和數(shù)據(jù)結(jié)構(gòu)。2、基本操作:提供對(duì)操作數(shù)據(jù)有用的基本操作集。3、順序控制:提供控制基本操作執(zhí)行順序的機(jī)制。4、數(shù)據(jù)訪問(wèn):提供控制向操作的執(zhí)行供給數(shù)據(jù)的機(jī)制。5、存儲(chǔ)管理:提供控制程序和數(shù)據(jù)存儲(chǔ)分配的機(jī)制。6、操作環(huán)境:提供與包圍程序和被處理數(shù)據(jù)的外部環(huán)境通訊的機(jī)制。感謝你的觀看2019年6月305計(jì)算機(jī)結(jié)構(gòu)與程序設(shè)計(jì)語(yǔ)言一個(gè)計(jì)算機(jī)包含6個(gè)主要部件,它們與6計(jì)算機(jī)硬件包括程序和被處理的數(shù)據(jù)操作主存和高速緩存中的數(shù)據(jù)在主存和外部環(huán)境間傳遞程序或數(shù)據(jù)完成處理工作取機(jī)器指令解碼調(diào)用指定的基本操作,以指定的操作數(shù)作為輸入返回感謝你的觀看2019年6月306計(jì)算機(jī)硬件包括程序和被處理的數(shù)據(jù)操作主存和高速緩存中的數(shù)據(jù)7翻譯器和軟件仿真計(jì)算機(jī)盡管理論上有可能直接構(gòu)造硬件或固件計(jì)算機(jī),來(lái)運(yùn)行任何特殊的程序設(shè)計(jì)語(yǔ)言,但構(gòu)造這樣的計(jì)算機(jī)并不經(jīng)濟(jì)?,F(xiàn)實(shí)的考慮是實(shí)際計(jì)算機(jī)采用低級(jí)機(jī)器語(yǔ)言(基于速度、靈活性和價(jià)格考慮),編程仍以高級(jí)語(yǔ)言進(jìn)行。語(yǔ)言實(shí)現(xiàn)者面臨的任務(wù)是如何使高級(jí)語(yǔ)言程序執(zhí)行在實(shí)際計(jì)算機(jī)上,而不必關(guān)心其機(jī)器語(yǔ)言是什么。這個(gè)實(shí)現(xiàn)問(wèn)題有兩個(gè)基本方案。1、翻譯(編譯)2、軟件仿真(軟件解釋)感謝你的觀看2019年6月307翻譯器和軟件仿真計(jì)算機(jī)盡管理論上有可能直接構(gòu)造硬件或固件計(jì)8翻譯(編譯)翻譯過(guò)程:高級(jí)語(yǔ)言程序→翻譯器→等價(jià)的機(jī)器語(yǔ)言程序→硬件直接執(zhí)行翻譯器:源語(yǔ)言→等價(jià)的目標(biāo)語(yǔ)言感謝你的觀看2019年6月308翻譯(編譯)翻譯過(guò)程:感謝你的觀看2019年6月309翻譯(編譯)幾種特殊類型的翻譯器:A、匯編器目標(biāo)語(yǔ)言:實(shí)際計(jì)算機(jī)的機(jī)器語(yǔ)言源語(yǔ)言:匯編語(yǔ)言,機(jī)器語(yǔ)言的符號(hào)表示大多數(shù)指令是一對(duì)一的翻譯B、編譯器目標(biāo)語(yǔ)言:匯編和機(jī)器語(yǔ)言源語(yǔ)言:高級(jí)語(yǔ)言C、裝配器或連接編輯器(loader/linkeditor)目標(biāo)語(yǔ)言:實(shí)際的機(jī)器代碼源語(yǔ)言:幾乎與機(jī)器代碼相同,通常包含可重定位的機(jī)器語(yǔ)言程序和數(shù)據(jù)表(刻劃可重定位代碼為變成真正可執(zhí)行所必須修改的地方)D、預(yù)處理器或宏處理器源語(yǔ)言:某種高級(jí)語(yǔ)言的擴(kuò)展形式目標(biāo)語(yǔ)言:同樣語(yǔ)言的標(biāo)準(zhǔn)形式。通常進(jìn)行宏替換。感謝你的觀看2019年6月309翻譯(編譯)幾種特殊類型的翻譯器:C、裝配器或連接編輯器(10翻譯(編譯)高級(jí)源語(yǔ)言到可執(zhí)行機(jī)器語(yǔ)言的翻譯通常涉及多個(gè)翻譯步驟,有時(shí),編譯的某些步驟本身也涉及多遍,如:多遍掃描。感謝你的觀看2019年6月3010翻譯(編譯)高級(jí)源語(yǔ)言到可執(zhí)行機(jī)器語(yǔ)言的翻譯通常涉及多個(gè)11軟件仿真(軟件解釋)我們可以通過(guò)運(yùn)行在一臺(tái)宿主機(jī)上的程序仿真另一臺(tái)以高級(jí)語(yǔ)言為機(jī)器語(yǔ)言的計(jì)算機(jī)。用宿主機(jī)的機(jī)器語(yǔ)言構(gòu)造一個(gè)程序集(表達(dá)高級(jí)語(yǔ)言執(zhí)行必需的算法和數(shù)據(jù)結(jié)構(gòu)),即用軟件構(gòu)造運(yùn)行于宿主機(jī)上的高級(jí)語(yǔ)言計(jì)算機(jī),稱為高級(jí)語(yǔ)言計(jì)算機(jī)在宿主機(jī)上的軟件仿真(或軟件解釋)。仿真計(jì)算機(jī)接受高級(jí)語(yǔ)言程序作為輸入,主仿真器程序完成解釋算法(解碼并執(zhí)行語(yǔ)言),最后從程序產(chǎn)生輸出。感謝你的觀看2019年6月3011軟件仿真(軟件解釋)我們可以通過(guò)運(yùn)行在一臺(tái)宿主機(jī)上的程序12軟件仿真和翻譯軟件仿真和翻譯的不同:均以高級(jí)語(yǔ)言程序?yàn)檩斎?,但是,翻譯為目標(biāo)碼后再運(yùn)行于實(shí)際計(jì)算機(jī)上仿真計(jì)算機(jī)直接執(zhí)行輸入程序翻譯器以物理輸入順序處理程序語(yǔ)句,每個(gè)語(yǔ)句只處理一次。仿真器以邏輯控制流處理程序,可能重復(fù)處理某些語(yǔ)句而完全忽略其他語(yǔ)句。純粹的翻譯和純粹的仿真形成兩個(gè)極端全翻譯是很少的,除了輸入語(yǔ)言和輸出語(yǔ)言非常相似,如匯編語(yǔ)言。全仿真也非常少,除了操作系統(tǒng)控制語(yǔ)言或交互式語(yǔ)言情形。感謝你的觀看2019年6月3012軟件仿真和翻譯軟件仿真和翻譯的不同:感謝你的觀看201913軟件仿真和翻譯通常,語(yǔ)言實(shí)現(xiàn)是二者的結(jié)合:感謝你的觀看2019年6月3013軟件仿真和翻譯通常,語(yǔ)言實(shí)現(xiàn)是二者的結(jié)合:感謝你的觀看214軟件仿真和翻譯翻譯和仿真各有不同優(yōu)點(diǎn)有的程序結(jié)構(gòu)最好翻譯成更簡(jiǎn)單的形式,——如循環(huán)中語(yǔ)句多次執(zhí)行,翻譯可省去解碼時(shí)間。有的方面最好保持原有形式,在執(zhí)行時(shí)根據(jù)需要處理。翻譯的主要缺點(diǎn)是失去了關(guān)于程序的一些信息。單個(gè)的高級(jí)語(yǔ)言語(yǔ)句比單條機(jī)器語(yǔ)言指令含有更多信息。仿真的優(yōu)缺點(diǎn)基本正好相反。不需要太多的空間來(lái)存儲(chǔ)代碼序列的多份拷貝。但解碼代價(jià)高。通常,如源語(yǔ)言結(jié)構(gòu)在目標(biāo)語(yǔ)言中有直接表示,則代碼擴(kuò)展不太嚴(yán)重,可采用翻譯。其他情形,可采用仿真。感謝你的觀看2019年6月3014軟件仿真和翻譯翻譯和仿真各有不同優(yōu)點(diǎn)感謝你的觀看201915軟件仿真和翻譯—語(yǔ)言劃分程序執(zhí)行時(shí)的基本表示是否為實(shí)際機(jī)器的機(jī)器語(yǔ)言,成了語(yǔ)言劃分的基礎(chǔ)。1、編譯型語(yǔ)言。如:C、C++、Fortran、Ada等源語(yǔ)言翻成機(jī)器碼,仿真僅限于一些運(yùn)行支持例程(用于仿真源語(yǔ)言中和機(jī)器語(yǔ)言沒(méi)有緊密類似的基本操作)。通過(guò)硬件解釋器,可實(shí)現(xiàn)更快的程序執(zhí)行。當(dāng)然,也可能有的部分仍采用軟件仿真,如數(shù)據(jù)控制結(jié)構(gòu)和存儲(chǔ)管理。2、解釋型語(yǔ)言。如:LISP、ML、Prolog、Smalltalk等翻譯器不是產(chǎn)生機(jī)器代碼,而是產(chǎn)生某種中間形式,比源語(yǔ)言更易執(zhí)行。然后使用軟件解釋器對(duì)中間代碼進(jìn)行執(zhí)行。通常執(zhí)行慢,也需要對(duì)基本操作、存儲(chǔ)管理和其他語(yǔ)言特性的仿真,這類語(yǔ)言翻譯器很簡(jiǎn)單,更多的復(fù)雜性在軟件仿真。返回感謝你的觀看2019年6月3015軟件仿真和翻譯—語(yǔ)言劃分程序執(zhí)行時(shí)的基本表示是否為實(shí)162.2虛擬計(jì)算機(jī)和綁定時(shí)間計(jì)算機(jī)的構(gòu)造方式1、通過(guò)硬件實(shí)現(xiàn),直接使用物理設(shè)備2、固件實(shí)現(xiàn),在合適的硬件計(jì)算機(jī)上使用微程序設(shè)計(jì)3、軟件仿真,在宿主機(jī)上用某種語(yǔ)言實(shí)現(xiàn)4、上述技術(shù)的組合,各自選擇合適的實(shí)現(xiàn)方式當(dāng)一個(gè)程序設(shè)計(jì)語(yǔ)言被實(shí)現(xiàn)后,程序執(zhí)行時(shí)所使用的運(yùn)行時(shí)數(shù)據(jù)結(jié)構(gòu)和算法定義了一個(gè)計(jì)算機(jī)。我們稱其為由語(yǔ)言實(shí)現(xiàn)定義的虛擬計(jì)算機(jī)。感謝你的觀看2019年6月30162.2虛擬計(jì)算機(jī)和綁定時(shí)間計(jì)算機(jī)的構(gòu)造方式感謝你的觀看17虛擬計(jì)算機(jī)虛擬機(jī)的機(jī)器語(yǔ)言是該語(yǔ)言的翻譯器產(chǎn)生的可執(zhí)行程序(形式:對(duì)編譯是實(shí)際的機(jī)器碼形式;對(duì)解釋是某種任意結(jié)構(gòu));其數(shù)據(jù)結(jié)構(gòu)是程序運(yùn)行時(shí)使用的運(yùn)行時(shí)數(shù)據(jù)結(jié)構(gòu);基本操作是那些運(yùn)行時(shí)實(shí)際可執(zhí)行的;順序控制、數(shù)據(jù)控制和存貯管理結(jié)構(gòu)也是那些運(yùn)行時(shí)使用的,不管其是用軟件、硬件、還是用微程序表示的。感謝你的觀看2019年6月3017虛擬計(jì)算機(jī)虛擬機(jī)的機(jī)器語(yǔ)言是該語(yǔ)言的翻譯器產(chǎn)生的可執(zhí)行程18虛擬機(jī)和語(yǔ)言實(shí)現(xiàn)(1/3)語(yǔ)言定義隱含地刻劃了一個(gè)虛擬機(jī)。如果語(yǔ)言用它們的虛擬機(jī)來(lái)定義,使得每個(gè)語(yǔ)言和一個(gè)共同理解的虛擬機(jī)相關(guān)聯(lián),則使用虛擬機(jī)來(lái)描述語(yǔ)言的語(yǔ)義是直接的。語(yǔ)言在不同計(jì)算機(jī)上的每次實(shí)現(xiàn),實(shí)現(xiàn)者都會(huì)從語(yǔ)言定義中看到略微(或非常)不同的虛擬機(jī)。同一語(yǔ)言的兩個(gè)不同實(shí)現(xiàn),可能使用不同的數(shù)據(jù)結(jié)構(gòu)和操作集合(特別是在語(yǔ)法中隱藏的部分)。每個(gè)實(shí)現(xiàn)者有很大自由度確定自己的虛擬機(jī)結(jié)構(gòu),這些是他的語(yǔ)言實(shí)現(xiàn)的基礎(chǔ)。感謝你的觀看2019年6月3018虛擬機(jī)和語(yǔ)言實(shí)現(xiàn)(1/3)語(yǔ)言定義隱含地刻劃了一個(gè)虛擬19虛擬機(jī)和語(yǔ)言實(shí)現(xiàn)(2/3)當(dāng)語(yǔ)言在一特定計(jì)算機(jī)上實(shí)現(xiàn)時(shí),實(shí)現(xiàn)者首先確定表示語(yǔ)言的語(yǔ)義解釋的虛擬機(jī),然后通過(guò)基本計(jì)算機(jī)提供的軟、硬件元素來(lái)構(gòu)造虛擬機(jī)。語(yǔ)言實(shí)現(xiàn)的組織和結(jié)構(gòu)由實(shí)現(xiàn)者的許多細(xì)微決策確定,需考慮計(jì)算機(jī)各種軟、硬件設(shè)施和使用代價(jià)。例:虛擬機(jī)如有整數(shù)加和平方根操作,則整數(shù)加可直接用硬件提供的整數(shù)加來(lái)實(shí)現(xiàn),平方根可用軟件仿真,使用一個(gè)子程序。感謝你的觀看2019年6月3019虛擬機(jī)和語(yǔ)言實(shí)現(xiàn)(2/3)當(dāng)語(yǔ)言在一特定計(jì)算機(jī)上實(shí)現(xiàn)時(shí)20虛擬機(jī)和語(yǔ)言實(shí)現(xiàn)(3/3)三個(gè)因素導(dǎo)致相同語(yǔ)言的不同實(shí)現(xiàn)1、實(shí)現(xiàn)者虛擬機(jī)概念的不同(隱含在語(yǔ)言定義中)2、宿主機(jī)提供的設(shè)施的不同3、實(shí)現(xiàn)者如何用宿主機(jī)提供的設(shè)施仿真虛擬機(jī)元素的選擇和如何去構(gòu)造翻譯器支持這些虛擬機(jī)選擇的不同。實(shí)現(xiàn)者還需確定什么通過(guò)翻譯處理?什么在執(zhí)行中解決?返回感謝你的觀看2019年6月3020虛擬機(jī)和語(yǔ)言實(shí)現(xiàn)(3/3)三個(gè)因素導(dǎo)致相同語(yǔ)言的不同實(shí)21綁定和綁定時(shí)間不嚴(yán)格地說(shuō),一個(gè)程序元素到某特定特征或性質(zhì)的綁定,僅是從一個(gè)可能性質(zhì)的集合中性質(zhì)的簡(jiǎn)單選擇。決定這個(gè)選擇的程序陳述或處理的時(shí)間稱為性質(zhì)對(duì)元素的綁定時(shí)間。語(yǔ)言中有不同的綁定和不同的綁定時(shí)間。綁定時(shí)間的類型對(duì)綁定類型沒(méi)有簡(jiǎn)單的分類,但可區(qū)分出一些主要的綁定時(shí)間。這里,我們基于一個(gè)基本假設(shè):程序的處理總是先翻譯,后執(zhí)行。感謝你的觀看2019年6月3021綁定和綁定時(shí)間不嚴(yán)格地說(shuō),一個(gè)程序元素到某特定特征或性質(zhì)22綁定時(shí)間(1/4)1、執(zhí)行時(shí)(運(yùn)行時(shí))很多綁定是在程序執(zhí)行過(guò)程中完成的。如:變量到值的綁定,變量到特定存儲(chǔ)位置的綁定(在很多語(yǔ)言中)。進(jìn)一步可分為:a.進(jìn)入子程序或塊時(shí)。大多數(shù)語(yǔ)言中,重要的綁定只限制發(fā)生在執(zhí)行中進(jìn)入子程序或塊時(shí),如C、Fortran中形參到實(shí)參、以及形參到特定存儲(chǔ)位置的綁定。b.在執(zhí)行中的任意點(diǎn)。某些綁定可以發(fā)生在程序執(zhí)行中的任意點(diǎn),如:變量通過(guò)賦值到值的綁定,以及在LISP、ML中,名字到存儲(chǔ)位置的綁定。感謝你的觀看2019年6月3022綁定時(shí)間(1/4)1、執(zhí)行時(shí)(運(yùn)行時(shí))感謝你的觀看2023綁定時(shí)間(2/4)2、翻譯時(shí)(編譯時(shí))綁定,可進(jìn)而分為三種:a.程序員選定的綁定寫程序時(shí),程序員有很多關(guān)于變量名、變量類型、程序語(yǔ)句結(jié)構(gòu)等選擇的決定,這些決定代表了翻譯的綁定,語(yǔ)言翻譯器使用這些綁定確定目標(biāo)程序的最終形式。b.翻譯器選擇的綁定有些綁定由翻譯器決定,沒(méi)有直接的程序員規(guī)約。如:數(shù)據(jù)對(duì)象在為某過(guò)程分配的存儲(chǔ)區(qū)域中的相對(duì)位置(程序員不知道也不關(guān)心),數(shù)組如何存儲(chǔ),數(shù)組描述子如何創(chuàng)建等。不同的語(yǔ)言實(shí)現(xiàn)可能以不同方式提供這些特性。c.裝配器選定的綁定(鏈接時(shí))程序通常包含幾個(gè)子程序,這些子程序被合并為一個(gè)可執(zhí)行程序。翻譯器決定變量到每個(gè)子程序中存儲(chǔ)地址的綁定,這些存儲(chǔ)必須被分配物理機(jī)中的實(shí)際地址。感謝你的觀看2019年6月3023綁定時(shí)間(2/4)2、翻譯時(shí)(編譯時(shí))綁定,可進(jìn)而分為24綁定時(shí)間(3/4)3、語(yǔ)言實(shí)現(xiàn)時(shí)語(yǔ)言定義的某些方面可能對(duì)所有運(yùn)行于同一語(yǔ)言實(shí)現(xiàn)上的程序均是相同的,但可能由于語(yǔ)言實(shí)現(xiàn)不同而不相同。如:通常和數(shù)的表示以及算術(shù)操作的表示相關(guān)的細(xì)節(jié)由底層硬件機(jī)進(jìn)行算術(shù)的方式確定。以某語(yǔ)言編寫的程序,如果使用了在實(shí)現(xiàn)時(shí)固定的特性,則不一定可以在該語(yǔ)言的另一種實(shí)現(xiàn)上運(yùn)行,即使運(yùn)行也可能有不同執(zhí)行結(jié)果。感謝你的觀看2019年6月3024綁定時(shí)間(3/4)3、語(yǔ)言實(shí)現(xiàn)時(shí)感謝你的觀看2019年25綁定時(shí)間(4/4)4、語(yǔ)言定義時(shí)語(yǔ)言的大多數(shù)結(jié)構(gòu)是在語(yǔ)言定義時(shí)固定的(對(duì)程序員寫程序時(shí)可用的規(guī)約)。如:對(duì)程序員可以使用的選擇語(yǔ)句形式、數(shù)據(jù)結(jié)構(gòu)類型、程序結(jié)構(gòu)等。感謝你的觀看2019年6月3025綁定時(shí)間(4/4)4、語(yǔ)言定義時(shí)感謝你的觀看2019年26綁定和綁定時(shí)間(例子)考慮下面簡(jiǎn)單例子:X:=X+10,假定該語(yǔ)言為L(zhǎng),則需考慮的綁定和綁字時(shí)間如下:1、變量X的可能類型的集合變量X在語(yǔ)句中通常和某類型相關(guān)聯(lián),如實(shí)數(shù)、整數(shù)、布爾,X的允許類型集合通常在語(yǔ)言定義時(shí)固定,如類型只能是:實(shí)數(shù),整數(shù),布爾,集合,字符等。此外,語(yǔ)言可能允許程序定義新類型,此時(shí)X的類型綁定在翻譯時(shí)固定。2、X的類型通常在翻譯時(shí)固定,通過(guò)顯式的聲明語(yǔ)句,如:FloatX。有些語(yǔ)言,如Smalltalk、Prolog,類型綁定在運(yùn)行時(shí)完成(無(wú)類型、弱類型語(yǔ)言)。感謝你的觀看2019年6月3026綁定和綁定時(shí)間(例子)考慮下面簡(jiǎn)單例子:X:=X+10,27綁定和綁定時(shí)間(例子)3、變量X的可能值的集合如X類型為real,則其值集為實(shí)數(shù),真實(shí)集應(yīng)為定義語(yǔ)言的虛擬機(jī)可表示和操作的實(shí)數(shù),通常是可方便地在硬件機(jī)上表示和操作的實(shí)數(shù)。這樣,X的可能值集在語(yǔ)言實(shí)現(xiàn)時(shí)確定,也可能是在裝載時(shí)根據(jù)執(zhí)行程序的硬件機(jī)確定。4、變量X的值在執(zhí)行中某點(diǎn),一特定值被約束到X。通常值是在執(zhí)行時(shí)通過(guò)對(duì)X的賦值而確定的。5、常量10的表示整數(shù)10的表示作為程序中的常量,使用串‘10’;執(zhí)行時(shí),表示為位串。程序中十進(jìn)制的選擇通常在語(yǔ)言定義時(shí)決定(10也可能為2#的2),而特殊位串的選擇是語(yǔ)言實(shí)現(xiàn)時(shí)決定。感謝你的觀看2019年6月3027綁定和綁定時(shí)間(例子)3、變量X的可能值的集合感謝你的觀28綁定和綁定時(shí)間(例子)6、操作符+的性質(zhì)符號(hào)+代表加法是在語(yǔ)言定義時(shí)確定。然而,+可以被重載(實(shí)數(shù)、整數(shù)、復(fù)數(shù)加等,根據(jù)語(yǔ)境確定)。在編譯型語(yǔ)言中,在編譯時(shí)確定,通常根據(jù)操作數(shù)類型判定。+的詳細(xì)定義依賴于底層硬件機(jī)。如X=2^49,則X+10可能在某一機(jī)器上沒(méi)有定義,因此,+的定義是在語(yǔ)言實(shí)現(xiàn)時(shí)確定,根據(jù)底層硬件機(jī)的定義。這樣:+表示加法在語(yǔ)言定義時(shí)定,每個(gè)加法操作在語(yǔ)言實(shí)現(xiàn)時(shí)定,符號(hào)+被綁定到特定加法操作是在翻譯時(shí),每個(gè)特定加法對(duì)特定操作數(shù)的值在運(yùn)行時(shí)定。感謝你的觀看2019年6月3028綁定和綁定時(shí)間(例子)6、操作符+的性質(zhì)感謝你的觀看2029綁定時(shí)間的重要性語(yǔ)言中許多重要而微妙的不同是由于綁定時(shí)間的不同。在分析和比較語(yǔ)言時(shí),需要常問(wèn)的問(wèn)題是:翻譯時(shí)做,還是執(zhí)行時(shí)做?例如:幾乎每個(gè)語(yǔ)言均允許數(shù)作為數(shù)據(jù),并允許在其上的算術(shù)操作,但并不是每個(gè)語(yǔ)言均適合涉及大量算術(shù)編程問(wèn)題。ML和Fortran,均允許建立和操作數(shù)值的數(shù)組,但ML不適合于求解需大數(shù)組和大量算術(shù)的問(wèn)題,而Fortran是合適的。原因:ML中,程序中大多數(shù)綁定是在執(zhí)行時(shí),需要大量執(zhí)行時(shí)間來(lái)創(chuàng)建和消除綁定。Fortran中,大多數(shù)綁定是在編譯時(shí),相同綁定的大部分在編譯時(shí)做一次,很少的工作在運(yùn)行時(shí)完成,因此,執(zhí)行更為高效。感謝你的觀看2019年6月3029綁定時(shí)間的重要性語(yǔ)言中許多重要而微妙的不同是由于綁定時(shí)間30綁定時(shí)間的重要性(續(xù))反過(guò)來(lái),為什么Fortran不適合于處理串,而ML更容易?原因也在于綁定時(shí)間。Fortran中大多數(shù)綁定在翻譯時(shí)完成,即在輸入數(shù)據(jù)被知道前,這樣它對(duì)執(zhí)行時(shí)有不同數(shù)據(jù)形式的情況不太合適,F(xiàn)ortran中串的大小和變量類型需在編譯時(shí)確定。ML可在執(zhí)行中延遲到輸入數(shù)據(jù)已被檢查,且綁定已確定時(shí),才確定大小和類型。這兩種不同綁定分為早綁定(early)和晚綁定(late)。二者的優(yōu)、缺點(diǎn)圍繞的沖突是:效率和靈活性,如二者均需考慮,則應(yīng)提供選擇的靈活性,如Ada。感謝你的觀看2019年6月3030綁定時(shí)間的重要性(續(xù))反過(guò)來(lái),為什么Fortran不適31綁定時(shí)間和語(yǔ)言實(shí)現(xiàn)語(yǔ)言定義通常允許指定綁定時(shí)間。設(shè)計(jì)語(yǔ)言時(shí),通常希望某特定綁定可在翻譯時(shí)完成。但實(shí)際的綁定時(shí)間只能在語(yǔ)言實(shí)現(xiàn)時(shí)決定。如:Pascal設(shè)計(jì)為允許變量類型在編譯時(shí)確定,但某種實(shí)現(xiàn)可以允許在執(zhí)行時(shí)作類型檢查。通常,一個(gè)語(yǔ)言設(shè)計(jì)指定綁定可能發(fā)生的最早時(shí)間,但很多實(shí)現(xiàn)事實(shí)上延遲這些綁定。然而,通常同一語(yǔ)言的大多數(shù)實(shí)現(xiàn)在相同時(shí)間完成大多數(shù)和綁定。如果一個(gè)語(yǔ)言設(shè)計(jì)為允許編譯時(shí)綁定,則延遲綁定將導(dǎo)致低效,還不一定取得太多的靈活性。需要注意的是,通常語(yǔ)言中很小的變化會(huì)導(dǎo)致綁定時(shí)間的大變化,如:Fortran90允許遞歸,就修改了很多重要特性的綁定時(shí)間,因?yàn)榻壎〞r(shí)間是實(shí)現(xiàn)依賴的。感謝你的觀看2019年6月3031綁定時(shí)間和語(yǔ)言實(shí)現(xiàn)語(yǔ)言定義通常允許指定綁定時(shí)間。感謝你的32C語(yǔ)言概述C是由AT&T貝爾電話實(shí)驗(yàn)室的DennisRitchie和KenThompson在1972年開(kāi)發(fā)出來(lái)的開(kāi)發(fā)C語(yǔ)言是為了在DECPDP-11上開(kāi)發(fā)UNIX操作系統(tǒng)。UNIX在那個(gè)時(shí)候還是一個(gè)很“小”的操作系統(tǒng),是為了和MIT和GE的大型操作系統(tǒng)Multics競(jìng)爭(zhēng)。C更像一個(gè)環(huán)境,而不僅僅是一種簡(jiǎn)單的語(yǔ)言:C語(yǔ)言C預(yù)處理器(#include,#if,...)C的接口假定(.h包含文件)C庫(kù)(“內(nèi)置”函數(shù),如printf,malloc,...)感謝你的觀看2019年6月3032C語(yǔ)言概述C是由AT&T貝爾電話實(shí)驗(yàn)室的Denni33C語(yǔ)言的程序結(jié)構(gòu)C語(yǔ)言程序是由一序列過(guò)程和全局聲明構(gòu)成的每個(gè)過(guò)程包含局部聲明、命令語(yǔ)句(它們可以調(diào)用其它過(guò)程)大多數(shù)數(shù)據(jù)都是整型數(shù)據(jù),這極大程度地保證了靈活性,因?yàn)椴畈欢嗨袞|西都可以看成是一個(gè)整數(shù)。如今,C和C++在某種程度上已經(jīng)成為開(kāi)發(fā)系統(tǒng)軟件(如操作系統(tǒng)、編譯器、應(yīng)用程序、視頻游戲等)的主要程序設(shè)計(jì)語(yǔ)言。感謝你的觀看2019年6月3033C語(yǔ)言的程序結(jié)構(gòu)C語(yǔ)言程序是由一序列過(guò)程和全局聲明構(gòu)34C語(yǔ)言程序的例子1#include<stdio.h>2constintmaxsize=9;3main()4 {inta[maxsize];5intj,k;6while((k=convert(getchar()))!=0){7for(j=0;j<k;j++)a[j]=convert(getchar());8for(j=0;j<k;j++)printf("%d",a[j]);9printf(";SUM=%d\n",addition(a,k));10while(getchar()!='\n');}}11/*Functionconvertsubprogram*/12intconvert(charch){returnch-'0';}13/*Functionadditionsubprogram*/14intaddition(v,n)15intv[],n;16{intsum,j;17sum=0;18for(j=0;j<n;j++)sum=sum+v[j];19returnsum;}感謝你的觀看2019年6月3034C語(yǔ)言程序的例子1#include35C語(yǔ)言程序的例子1#include

<stdio.h>2constintmaxsize=9;3main()4 {inta[maxsize];5intj,k;6while((k=convert(getchar()))!=0){7for(j=0;j<k;j++)a[j]=convert(getchar());8for(j=0;j<k;j++)printf("%d",a[j]);9printf(";SUM=%d\n",addition(a,k));10while(getchar()!='\n');}}11/*Functionconvertsubprogram*/12intconvert(charch){returnch-'0';}13/*Functionadditionsubprogram*/14intaddition(v,n)15intv[],n;16{intsum,j;17sum=0;18for(j=0;j<n;j++)sum=sum+v[j];19returnsum;}ClanguageCpreprocessorCinterfaceassumptions

Clibrary感謝你的觀看2019年6月3035C語(yǔ)言程序的例子1#include36C++概述由AT&T的BjarneStroustrup在1986年開(kāi)發(fā),它是C語(yǔ)言的一種擴(kuò)展。C++基本上包括了C的所有東西(包括好的和壞的特征)增加了強(qiáng)類型目標(biāo)是在保持C語(yǔ)言執(zhí)行的高效性的同時(shí),增加新的特征C++增加了類的概念(借鑒了Simula中的相關(guān)概念,它是由Algol擴(kuò)展而來(lái)的一種模擬語(yǔ)言)。數(shù)據(jù)定義成類的局部屬性函數(shù)(方法)可以訪問(wèn)局部數(shù)據(jù)實(shí)現(xiàn)了類的繼承概念感謝你的觀看2019年6月3036C++概述由AT&T的BjarneStrous37C++語(yǔ)言程序的例子1#include<stream.h>2classDataConvert{3protected:intconvert(ch

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論