大三開學第一天--編譯原理和人工智能的初步入門

  開學的第一天,學的都是入門,因此知識比較少,可是我仍是會整理出來。由於是開學第一天,事情比較忙,知識沒有獲得很好的消化和了解,因此今天只做初步瞭解,過幾天會找時間從新整理,具體化。javascript

 

 編譯原理第一課:php

  編譯器:編譯器是一種語言處理器,能夠將「一種語言(一般爲高級語言)」翻譯爲「另外一種語言(一般爲低級語言)」。通俗的講,就是咱們目前所使用的高級語言,如C++,java,都是易於人們理解和編寫的。可是對於機器來講,只能看懂機器語言(即彙編語言,屬於低級語言)。因此,人們用高級語言寫出來的代碼,首先要通過編譯器,編譯成機器可識別的低級語言,才能被機器正確的執行。html

  解釋器: 解釋器是另外一種常見的語言處理器,又稱直譯器,就是一種可以把高級編程語言一行一行直接轉譯運行的程序,通常用於解釋性語言,如php,postscritp,javascript,python。前端

  編譯器與解釋器的不一樣: 編譯器是把整個源代碼編譯成目標代碼,執行時不在須要編譯器,直接在支持目標代碼的平臺上運行,而解釋器則是編譯一行代碼即執行一行代碼,所以,在效率上來講,編譯器的效率要比解釋器高。可是因爲解釋器是一行一行的編譯執行,因此在錯誤診斷方面,解釋器效果更好。java

  編譯器與解釋器的相同點:細化到編譯單行來看,編譯器和解釋器的處理方式和結構是差很少的。在編譯單行代碼的時候,解釋器和編譯器都要進行詞法分析、語法分析和語義分析,以後,兩者開始有所分別。解釋器在語義分析後選擇了直接執行語句;編譯器在語義分析後選擇將將語義存儲成某一種中間語言,以後經過不一樣的後端翻譯成不一樣的機器語言(可執行程序)。如圖(參考博客 http://www.cnblogs.com/sword03/archive/2010/06/27/1766147.html)python

  解釋器與編譯器的區別.jpg

  在這裏還要了解一下編譯器的結構:編譯器可分爲分析部分(前端)和綜合部分(後端),分析部分就是經過詞法分析,語法分析,語義分析將源程序分解成多個組成要素,並在這些組成要素上加上語法結構,而後使用這個結構來建立該源程序的一箇中間表示(即上面的中間代碼)。分析部分還會收集有關源程序的信息,並把這些信息存放在一個稱爲符號表(symble table)的數據結構中。符號表將和中間表示形式一塊兒傳送給綜合部分(後端)。而綜合部分(後端)根據中間表示(中間代碼)和符號表中的信息來構造用戶期待的目標程序。如實例圖(頂部是一個待處理的賦值語句,lexical analyzer爲詞法分析,syntax analyzer爲語法分析,semantic analyzer爲語義分析,省略了綜合部分(後端))編程

 

好吧,因爲時間較爲緊迫,編譯器的初級介紹就到這。週末回來,繼續完善本週編譯原理所學的知識。(但願週末能夠帶來安卓的基本教程,日後還會有ps,C#的教程,一步一步來,乾巴爹 ^_^)。後端

編譯器結構實例

相關文章
相關標籤/搜索