編譯程序:把一種語言(源語言===高級語言)轉換成另一種語言(目標語言===低級語言(匯編或者機器語言))的程序。
詞法分析:對輸入的字符串進行掃描和分解,識別出一個個單詞及其類型;(輸入是字符串,輸出是<單詞的種類標示符,單詞的值>)
語法分析:對輸入的字符串進行語法單位的識別,判斷他是一個賦值語句還是一個表達式(輸入是程序串,輸出是是否是合法的語法單位)
語義分析與中間代碼的產生:對輸入的程序串進行語法的檢查,並且合法的話進行初步的翻譯。(輸入是語法單位,輸出是翻譯的初步代碼)
優化器:對於初步翻譯得到的代碼進行再次的掃描和翻譯,去掉冗余。(輸入是初步的翻譯結果,輸出是優化后的代碼)
目標代碼生成器:對於優化后的代碼進行再次翻譯,生成符合機器的最終代碼。(輸入是優化后的代碼,輸出是符合機器的目標代碼)
表格和表格管理:每個階段都會有相應的表格記錄各類信息以及編譯的進展狀況。
出錯處理:當編譯的過程中有錯誤出現的時候應當有報錯處理,具體的地點,原因,並且使得范圍盡量的小,使源程序的其余部分繼續執行。
遍:就是對源程序或者源程序的中間結果進行從頭到尾的掃描依次,並且作出相應的處理,生成新的中間結果或者目標程序。次法分析相當於一遍,語法分析相當於一遍,但是詞法、語法可以合為一遍,根據自身的內存情況而定。內存大的時候可以少幾遍。因為遍數多了也是會浪費輸入輸出時間的。
閉包:V^n=VVVVV....V 規定V^0={e}(這里的e就是空的意思)。
V*=V^0UV^1UV^2...(其中V*是V的閉包)相當於你從0到n都被我承包了。
文法:定義一組的規則產生式的集合,如:G:
E->i
E->E+E
E->E*E
E->(E)
稱為文法。其中的每一條即為產生式。
一組產生式是一個四元式(VT,VN,S,p),終結符號,非終結符號,開始符號,一組產生式。
句型:由開始符號推導出的一個串是句型,如:s-*>a;a是一個句型,如果a中只含終結符,a為句子。E->E*E中E*E是一個句型,E->i中i也是一個句型,同時也是一個句子。E的所有句子是一個語言。
語法樹:句型的推導過程就是一顆語法樹。
二義性:是指對於一種推導有多中不同的結果,而不是分別最左推導和最右推導有不同的結果。