可擴充編譯程式

可擴充編譯程式

編譯程式是指把用高級程式設計語言書寫的源程式,翻譯成等價的機器語言格式目標程式的翻譯程式。編譯程式要求足夠複雜和完善的語言功能。可擴充編譯程式是其他編譯程式在現有編譯器基礎上擴展,最後得到較為完善的源語言的編譯程式。

基本介紹

  • 中文名:可擴充編譯程式
  • 外文名:extendible compiler
  • 學科:計算機
  • 領域:編譯原理
  • 定義:編譯程式的功能能進行擴充
  • 有關術語:編譯程式
簡介,編譯實現方式,編譯程式,

簡介

一個編譯程式的重要性體現為它使得多數計算機用戶不必考慮有關的繁瑣細節。使程式設計師和設計專家獨立於計算機。可擴充編譯程式簡單來說是指編譯程式允許程式設計人員對編譯程式的功能進行擴充和完善。與編譯實現方式有關,例如編譯程式採用自編譯方式,程式設計人員就可以根據實際需求對編譯程式進行完善。

編譯實現方式

自展法
隨著編譯技術的發展和社會對編譯程式需求的不斷增長,上世紀 60 年代起,不斷有人使用自展技術來構造編譯程式。自展的主要特徵是用被編譯的語言來書寫該語言自身的編譯程式。1971 年,PASCAL 的編譯程式用自展技術生成後,其影響就越來越大。
自動生成法
上世紀 70 年代, 隨著諸多種類的高級程式設計語言的出現和軟體開發自動化技術的提高,編譯程式的構造工具陸續誕生,如 70 年代 Bell 實驗室推出的 LEX 和 YACC ,這兩種工具在各種語言編譯程式的實現中還廣為套用。 其中 LEX 是詞法分析器的自動生成工具, YACC 是語法分析器的自動生成工具。
自編譯方式
採用自編譯方式生成編譯程式的思想是先用目標機的彙編語言或機器語言對源程式的核心部分構造一個小小的編譯程式,再以它為工具構造一個能夠編譯更多語言成分的較大編譯程式。 如此擴展下去,就像滾雪球一樣,越滾越大,最後生成人們所期望的整個源語言的編譯程式。

編譯程式

編譯程式(Compiler)是一種程式。它把用高級語言寫的源程式作為數據接收,經過翻譯轉換,產生面向機器的代碼作為輸出。編譯程式完成從源程式到目標程式的翻譯工作是一個複雜的整體過程,一般來說,一個編譯程式的整個工作過程是分成六個階段進行的,每個階段將源程式的一種表示形式轉換成另一種表示形式,各個階段進行的操作在邏輯上是緊密連線在一起的。這個六個階段是: 詞法分析、語法分析、語義分析、中間代碼生成、代碼最佳化、目標代碼生成。
詞法分析程式的主要任務: 讀源程式,產生單詞符號和濾掉空格。逐個讀入源程式字元並按照構詞規則切分成一系列單詞。單詞是語言中具有獨立意義的最小單位,包括保留字、標識符、運算符、標點符號和常量等。詞法分析是編譯過程中的一個階段,在語法分析前進行 。也可以和語法分析結合在一起作為一遍由語法分析程式調用詞法分析程式來獲得當前單詞供語法分析使用。詞法分析程式的主要功能是從字元流的源程式中識別單詞,他要從左至右逐個字元地掃描源程式,因此他還可完成其他一些任務。比如,濾掉源程式中的注釋和空白;又比如 ,為了使編譯程式能將發現的錯誤信息與源程式的出錯位置聯繫起來。
語義分析階段審查源程式有無語義錯誤 ,為代碼生成階段收集類型信息。比如語義分析的一個工作是進行類型審查,審查每個運算符是否具有語言規範允許的運算對象,當不符合語言規範時,編譯程式應報告出錯。又比如某些語言規定運算對象可被強制,那么當二目運算施於一整型和一實型時,編譯程式應將整型轉換實型而不能認為是源程式的錯誤。
中間代碼是源程式的一種內部表示,或稱中間語言。中間代碼的作用是可使編譯程式的結構在邏輯上更為簡單明確,特別是可使目標代碼的最佳化比較容易實現中間代碼,即為中間語言程式,中間語言的複雜性介於源程式語言和機器語言之間。中間語言有多種形式,常見的有逆波蘭記號、四元式、三元式和樹。代碼最佳化是指對程式進行多種等價變換,使得從變換後的程式出發,能生成更有效的目標代碼。所謂等價,是指不改變程式的運行結果。所謂有效,主要指目標代碼運行時間較短,以及占用的存儲空間較小。這種變換稱為最佳化。

相關詞條

熱門詞條

聯絡我們