編譯器例程

編譯器例程

編譯器(compiler),是一種電腦程式,它會將用某種程式語言寫成的原始碼(原始語言),轉換成另一種程式語言(目標語言)。編譯器例程是指可由其他函式或程式調用的編譯器內部函式或子程式。編譯器例程也可以理解為編譯器對外提供的功能接口或服務的集合。

基本介紹

  • 中文名:編譯器例程
  • 外文名:compiler routines
  • 學科:計算機
  • 定義:對外提供的功能接口或服務的集合
  • 有關術語:編譯器
  • 作用:獨立實現特定功能
簡介,編譯器,推動編譯技術發展的因素,

簡介

例程是指可由其它程式或子程式調用的子程式。子例程有兩個方面:一個是定義方面,稱為子例程定義或子例程說明;另一個是調用方面,稱為子例程調用。隨著實現方式的不同 ,又可區分為開式子例程和閉式子例程。其中子程式是指與子計算任務相應的處理對象和處理規則的描述。編譯器例程是指編譯器程式的一部分代碼,該代碼執行特定的任務並且與編譯器中的其他代碼相對獨立。編譯器例程可以獨立向外提供功能與服務。編譯例程可以是詞法分析語法分析語義分析程式。
詞法分析(英語:lexical analysis)是計算機科學中將字元序列轉換為單詞(Token)序列的過程。進行詞法分析的程式或者函式叫作詞法分析器(Lexical analyzer,簡稱Lexer),也叫掃描器(Scanner)。詞法分析器一般以函式的形式存在,供語法分析器調用。詞法分析階段是編譯過程的第一個階段,是編譯的基礎。這個階段的任務是從左到右一個字元一個字元地讀入源程式,即對構成源程式的字元流進行掃描然後根據構詞規則識別單詞(也稱單詞符號或符號)。詞法分析程式實現這個任務。詞法分析程式可以使用Lex等工具自動生成。詞法分析是編譯程式的第一個階段且是必要階段;詞法分析的核心任務是掃描、識別單詞且對識別出的單詞給出定性、定長的處理;實現詞法分析程式的常用途徑:自動生成,手工生成。
在計算機科學和語言學中,語法分析(英:Syntacticanalysis,也叫Parsing)是根據某種給定的形式文法對由單詞序列(如英語單詞序列)構成的輸入文本進行分析並確定其語法結構的一種過程。語法分析器(Parser)通常是作為編譯器或解釋器的組件出現的,它的作用是進行語法檢查、並構建由輸入的單詞組成的數據結構(一般是語法分析樹、抽象語法樹等層次化的數據結構)。語法分析器通常使用一個獨立的詞法分析器從輸入字元流中分離出一個個的“單詞”,並將單詞流作為其輸入。實際開發中,語法分析器可以手工編寫,也可以使用工具(半)自動生成。

編譯器

又稱編譯程式,是將高級語言源程式翻譯成低級語言程式。一個足夠複雜的程式,語言功能的完善,硬體結構的發展,環境的友好要求,都對編譯程式提出了更高的要求。編譯器屬於採用生成性實現途徑實現的翻譯程式。它以高級程式設計語言書寫的源程式作為輸入,而以彙編語言或機器語言表示的目標程式作為輸出。編譯出的目標程式通常還要經歷運行階段,以便在運行程式的支持下運行,加工初始數據,算出所需的計算結果。編譯過程分為分析和綜合兩個部分,並進一步劃分為詞法分析、語法分析、語義分析、代碼最佳化、存儲分配和代碼生成等六個相繼的邏輯步驟。這六個步驟只表示編譯程式各部分之間的邏輯聯繫,而不是時間關係。編譯過程既可以按照這六個邏輯步驟順序地執行,也可以按照平行互鎖方式去執行。在確定編譯程式的具體結構時,常常分若干遍實現。對於源程式或中間語言程式,從頭到尾掃視一次並實現所規定的工作稱作一遍。每一遍可以完成一個或相連幾個邏輯步驟的工作。例如,可以把詞法分析作為第一遍;語法分析和語義分析作為第二遍;代碼最佳化和存儲分配作為第三遍;代碼生成作為第四遍。反之,為了適應較小的存儲空間或提高目標程式質量,也可以把一個邏輯步驟的工作分為幾遍去執行。例如,代碼最佳化可劃分為代碼最佳化準備工作和實際代碼最佳化兩遍進行。一個編譯程式是否分遍,以及如何分遍,根據具體情況而定。其判別標準可以是存儲容量的大小、源語言的繁簡、解題範圍的寬窄,以及設計、編制人員的多少等。分遍的好處是各遍功能獨立單純、相互聯繫簡單、邏輯結構清晰、最佳化準備工作充分。缺點是各遍之中不可避免地要有些重複的部分,而且遍和遍之間要有交接工作,因之增加了編譯程式的長度和編譯時間。一遍編譯程式是一種極端情況,整個編譯程式同時駐留在記憶體,彼此之間採用調用轉接方式連線在一起。當語法分析程式需要新符號時,它就調用詞法分析程式;當它識別出某一語法結構時,它就調用語義分析程式。語義分析程式對識別出的結構進行語義檢查,並調用“存儲分配”和“代碼生成”程式生成相應的目標語言指令。隨著程式設計語言在形式化、結構化、直觀化和智慧型化等方面的發展,作為實現相應語言功能的編譯程式,也正向自動程式設計的目標發展,以便提供理想的程式設計工具。

推動編譯技術發展的因素

語言范型
程式設計已經基本上從傳統的過程式轉向對象式,並且正在從對象式轉向組件型。這其實是程式設計范型的變遷,是在計算機技術背景下認識世界的觀點的變化:過程式將完成事務看成是一系列的步驟,而對象式卻將世界看成是由一系列對象組成的,這些對象之間互動合作完成特定的事務。從過程式到對象式,有著質的變化,而非一般的修改和完善,由此帶來了語言的變化。 因此,編譯技術的討論對象從過程式語言轉到對象式語言。
計算機體系結構
隨著學習計算機技術的深入,更加認為計算機系統是複雜度遞增的一層層封裝結構。早期計算機系統結構單一,只有一次轉化,就是把機器語言轉化到電器信號,沒有涉及到我們一般意義上的程式設計語言之間的編譯轉化。然而這個單一簡單的系統結構,帶來的是程式編寫的極大困難,計算機套用無疑成了面向少數數學家的高端套用,其學習曲線的陡峭非常人所能及。 此外,這一極大的複雜度,也影響了編寫大型程式的能力。 隨著彙編、乃至後來高級語言的出現,這一情況就有了改觀。

相關詞條

熱門詞條

聯絡我們