當前位置:成語大全網 - 成語詞典 - 漢語程序設計語言的編譯原理

漢語程序設計語言的編譯原理

漢編系統是壹個交互式的程序設計環境,最初是為程序員在小型和微型計算機上開發應用程序而設計的。主要應用於科學計算和工業控制,比如儀器、機器人、過程控制、圖形和圖像處理、人工智能和商業應用。 漢編語言的主要優點是軟件開發快速、交互式、計算機硬件的高效使用等。

漢編語言與傳統語言最大的不同是它的可擴展性。 漢編語言的編程過程就是定義新的詞,詞實際上就是語言的新命令。詞可以用壹系列以前定義的詞來定義,這個過程與教育孩子的過程相似:我們總是用孩子們以前理解的概念來教給孩子們新的概念,而這些詞被稱為“高級定義”。同樣,新的詞也可以用匯編代碼定義。

可擴展性的結果是我們在開發壹個應用的同時,也間接地開發了壹個特殊的、針對這壹類應用的“面向應用的模塊,它可以用於或者經過修改之後被用於相似的應用。

漢編語言的可擴展性並不僅僅是為語言自身增加新的命令,所以不要把定義詞與傳統高級語言定義函數、過程等同。漢編系統還能對定義詞(建詞)進行擴展,創建壹個可以定義其它詞的詞,這種詞被稱為“定義詞”。在創建這樣壹個定義詞的時候,程序員能夠指定它所創建的詞在編譯時間、運行時間或者這兩種狀態下的特殊行為。這個能力允許我們定義特殊的數據類型,並對其行為和結構實施完全的控制。又由於這種詞的運行時行為可以用高級語言或者匯編語言來定義,所以由定義詞創建的詞將具有與其它漢編詞壹樣的性能。系統也允許我們增加壹個新的“編譯指示符”以實現特殊類型的循環或者其它的控制結構。 比如,漢語言定義壹個程序變量的 詞:給,其代碼大概如下:

編 給 ( 32位數 -<變量名>- ) \ 編譯時

( --- 32位數 ) \ 運行時

建詞 可用地址 4 字節空出 寫

動作 讀

定義變量時

5 給 變量壹

則 5 被自動寫入 變量壹的實體域中

運行“變量壹”時

變量壹

則 變量壹 實體域中的數字 5 被自動讀取,放到數摞上 漢編詞可以使用以前定義的詞或者匯編代碼來定義,它們與其它語言的子程序相似,也與其它語言的命令等效。 漢編系統允許我們在鍵盤上打入壹條指令的詞名,這個詞將被立即執行。然而,如果我們把功能的詞名放到定義中,將編譯成對於這個詞的引用。

高級詞是由其它詞的集合來定義的,我們可以把這個過程想象成是其它語言的宏。新的詞被加入到它們可以使用的存儲器中,其定義被加入到詞典中。在壹個漢編詞的命名規則中,只有很少的幾個字符不能作為詞名使用。

當遇到壹個詞的時候, 漢編系統就通過詞典搜索希望找到這個詞的定義,如果找到這個詞定義的功能,或者被立即執行,或者作為引用而被編譯到新的定義中。然而,如果在詞典中沒有找到這個詞,系統就試著把它轉換成壹個數。如果轉換成功,就把它放在數摞上。如果不能轉換成數字,就顯示這個未定義的詞名並打印出壹個錯誤的信息來報告這個詞是系統所不知道的。

漢編詞的執行流程大概可以用壹個詞來模擬如下:

編 查詞測試

 { \詞名串 -- }

 255個字節空給 詞名串

詞名串 255填0

詞名串 字串傳送

詞名串 (查詞)

 0=

計字節

串>數

否則

字串未定義詞名串 字串+傳送

詞名串 計字節

回車 印字串

全復位

然後

否則

執行

然後

。 ★

字串 看數摞 查詞測試 數摞已空! ★

字串 123456 查詞測試 ★.

看數摞 [1] 123456 ★.

顯 123456 ★

字串 看方法 查詞測試

看方法未定義

漢編系統編譯流程如右圖(流程圖來源:漢編新浪博客)所示。

漢編語言堅持“結構化程序設計”原理:

· 詞必須在引用之前被定義;

· 邏輯流限制只有順序、條件和循環,有專門的詞用於實現常用的程序控制結構;

· 程序員使用許多小的、獨立的模塊(詞)來實現最大的可測試性和可靠性;

這種方法有兩個明顯的優點

· 新的詞總是用以前定義和測試過的詞來構造,所以調試更容易。模塊可以單獨執行以測試它的功能;

· 固有的模塊性使漢編語言成為壹個“設計性語言”,允許自頂向下的設計同時保持自底向上的測試。壹個詞可以在不同的程序中使用,但是它的功能只需要定義壹次;

這些都保證了漢編軟件能夠快速和有效地被開發,同時,如果管理得當,也可以作為自身文檔的基礎。

漢編語言的5個主要元素決定了它的特點:

· 壹個詞典;

· 兩個數摞,壹個是參數摞,另壹個是用於嵌套的返回摞;

· 鍵盤(輸入流)解釋器;

· 壹個編譯器;

· 虛擬存儲; 詞典是漢編定義詞的數據和代碼存儲空間,也為編譯建立了詞的索引。詞典中的詞包括漢編程序代碼詞、常數定義詞、變量定義詞、不定量定義詞,面向對象部分還有模板、對象、對象事件、消息。

漢編代碼存儲在詞典中。詞典占據了系統存儲器的很大部分,它由壹個串線鏈接的可變長度的項目組成,每個項目定義了壹個詞。每個定義的內容根據詞的類型(數據項、常數、操作序列等)而有所不同,詞典是可擴展的。

詞是由“定義詞”加入詞典的,最常用的定義詞是“ 編 。”當“編”執行的時候,馬上就把後面的詞名掃描,建立壹個詞典項,然後進入“編譯”模式。有許多不同的編譯方法,最常用的是“串線編碼”,這種方法把定義編譯成壹系列以前定義詞的地址引用。詞的定義由“。”(句號)結束。下面就是壹個詞的定義:

編 平方 ( -- ) ♂ * 顯 。

當壹個詞名項被編譯到詞典中的時候(稱為定義的首部),它包含壹個指向詞典中前壹個首部的指針。新詞的詞名加入詞典(這裏就是 平方 ),接著壹個指向詞名為“( 編 )”子程序調用的指針編譯到詞典中作為定義的第壹部分,這個指針指向壹段在解釋定義體時需要執行的代碼。當然,這裏所說的不是唯壹的編譯技術,但它的應用最為普遍,這種技術稱為間接串線編碼,因為定義中的第壹個項目是壹段代碼的引用,這段代碼知道如何解釋定義的其它部分。

定義的其它部分稱為這個定義的體。在編譯模式下,系統將依次尋找每個詞的首部。每個首部地址依次放到定義體中,這樣就產生了壹個地址列表。最後在到達“。”時,詞名為“。”的子程序地址被編譯進詞典。“ 。” 子程序用來將控制返回到調用詞,就像壹個子程序返回壹樣。