軟考之程序語言與語言處理程序總結

 

1.程序設計語言分類

程序設計語言基本上可以分爲命令式程序設計語言、函數式程序設計語言、面向對象程序設計語言和邏輯程序設計語言

命令式程序設計語言:基於動作的語言,計算在這裏被看作是一個動作的序列。這些動作能夠改變變量的值,最典型的動作就是賦值。代表有Fortran, Pascal和C語言等。

函數式程序設計語言主要用於人工智能領域,代表有Lisp, ML等。

面向對象程序設計語言中最核心的東西就是對象和類的概念。面向對象的三個核心概念就說封裝、繼承、多態。代表有C++, SmallTalk, Java, C#等。

邏輯程序設計語言是一類以形式邏輯爲基礎的語言,其代表是建立在關係理論和一階謂詞理論基礎上的Prolog,其適用於書寫自動定理證明,專家系統和自然語言理解等問題的程序。


2.什麼是彙編語言?

      彙編語言是爲特定的計算機設計的面向機器的符號化的程序設計語言。用助記符(Mnemonics)代替機器指令的操作碼,用地址符號(Symbol)或標號(Label)代替指令或操作數的地址。通常被應用在底層,硬件操作和高要求的程序優化的場合。驅動程序、嵌入式操作系統和實時運行程序都需要彙編語言。

    基本組成      

      彙編語言源程序主要由若干語句組成,主要的3類語句是:

        指令語句:機器指令語句,將其彙編後能產生相應的機器代碼,這些代碼被CPU直接識別並執行相應的操作。基本指令有:ADD、SUB、AND
        僞指令語句:指示彙編程序在彙編源程序時完成某些工作

        宏指令語句:多次重複使用程序段定義爲宏,而宏指令是對宏的引用。

    彙編程序

      提到彙編語言,不得不說彙編程序,它是將用彙編語言編寫的源程序翻譯成機器指令程序。計算機一般不能直接識別彙編語言,但是經過彙編程序編譯成機器指令之後即可識別。
      彙編程序一般需要兩次掃描源程序才能完成翻譯過程,第一次掃描時定義符號的值並創建一個符號表ST,記錄彙編所遇到的符號值。第二次掃描是產生目標程序,將可執行的彙編語言翻譯成對於的二進制代碼機器指令。
      彙編語言的編譯過程:
       詞法分析:編譯的第一個階段,單詞符號是基本語法單位
       語法分析:根據語法規則將單詞符號序列分解成各類語法單位。

       詞法和語法分析在本質上都是對源程序的結構進行分析

       語義分析:分析各語法結構的含義,檢查源程序是否包含靜態語義錯誤,並收集類型信息供後面的代碼生成階段使用。主要的一個工作是進行類型分析和檢查
       只有語法和語義都正確的源程序才能翻譯成正確的目標代碼
       中間代碼生成:根據語義分析的輸出生成,與具體的機器無關。最常用的一種中間代碼是與彙編語言的指令非常相似的三地址碼,實現方式採用四元式
       語義分析和中間代碼生成所依據的是語言的語義規則
      代碼優化:可在中間代碼階段優化,也可在目標代碼生成階段進行。
         優化一般建立在對程序的控制流和數據流分析的基礎之上,與具體的機器無關

      目標代碼的生成:將中間代碼變換成特定機器上的絕對指令代碼、可重定位的指令代碼或彙編指令代碼


不是所有的編譯器都會有中間代碼生成和代碼優化的過程。


3.解釋程序和編譯程序的區別

解釋程序在詞法,語法和語義分析方面與編譯程序的工作原理基本相同,但是在運行用於程序時,他直接執行源程序或者源程序中間表示形式。因此,解釋程不產生源程序的目標程序,這是它與編程程序的主要區別。

4.源程序、中間代碼、目標代碼的關係

源代碼指的是用高級語言編寫的程序,將源程序經過編譯,就可以得到中間代碼並且最終得到目標代碼,目標代碼就說可以在具體機器上執行的代碼,這時源程序和編譯程序都不再參與目標程序的執行過程,所以在機器上運行的目標程序是完全獨立於源代碼的。
另外,目標代碼是在機器上運行的代碼,所以它的生產與目標機器的體系結構是密切相關的。
中間代碼是一種簡單且含義明確的記號系統,與具體的機器無關,可以有若干種形式。可以將不同的高級程序語言翻譯成同一種中間代碼,另外由於與具體的機器無關,使用中間代碼有利於進行與機器無關的優化處理,以及提高編譯程序的可移植性。

5.編譯與反編譯

編譯是將高級語言源程序翻譯成機器語言程序(即目標代碼),反編譯是編譯的逆過程。反編譯通常是不能將可執行文件還原成高級語言源代碼,只能轉換成功能上等價的彙編程序。


6.源程序錯誤

源程序中可能出現的錯誤主要有三類:詞法錯誤、語法錯誤和語義錯誤
1.詞法錯誤:如非法字符或拼寫錯關鍵字、標識符等。
2.語法錯誤:語法結構出錯,如少分號、begin/end不匹配等
3.靜態語義錯誤:如類型不一致、參數不匹配等
4.動態語義錯誤(邏輯錯誤):如死循環、變量爲零時做除數等
一般錯誤的診斷和恢復都在語法分析階段,一個原因是大多數錯誤都是語法錯誤,另一個原因是語法分析方法的準確性,它能以非常有效的方法診斷語法錯誤。
在編譯時,想診斷語義或邏輯錯誤是非常困難的,所以存在死循環這中錯誤,一般在編譯的時候不會報錯,只有到程序運行時纔會發現。

發佈了110 篇原創文章 · 獲贊 253 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章