分析可以用來確定程式的結構。
程式使用的語法是上下文無關文法,是喬姆斯基分類法則中的第2類語法。01
23文法名稱
非限制型文法
上下文有關文法
上下文無關文法
正則文法
對應機器
圖靈機線性(邊界)自動機
下推自動機
有窮自動機
識別物件
自然語言
受限自然語言
程式語言
單詞上下文無關文法使用bnf文法表示。文法規則中有乙個「推導」的行為,此行為在右邊選乙個結構名字替換序列。
推導中有最左推導和最右推導兩種方法。
文法可能有二義性,可以通過兩種方式來解決。一種是設立消除二義性規則;另一種是將文法變成乙個強制正確分析書的構造的格式。
擴充套件的bnf即ebnf中有和[…]兩個符號。分別表示重複和可選。ebnf可以通過作圖的方式展示出來。
上面提到,有兩種方法可以去除文法的二義性。下面給出第二種解決二義性的方法的例題。
上圖中的強制文法通過左遞迴實現左結合,從而實現了結合性。
通過上面的文法來實現:
a的最左推導為:
a的分析樹為:
a的抽象語法樹為:
b的分析樹為:
b的抽象語法樹為:
c的分析樹為:
c的抽象語法樹為:
參考資料:《編譯原理與實踐》
現代編譯原理 第二章(語法分析之上下文無關文法)
我們知道了詞法分析是專注於乙個檢測乙個語言中是否有不合格的單詞,以及將單詞進行分類。那麼為什麼要分類呢?其目的就是為了規範化。只有無限的東西規範到乙個範圍內,我們才能對其進行識別和分析。例如,我們定義在加號兩邊只能是兩個id。這樣,如果出現if plus id 這樣的結構就說明是不正確的,其犯了語法...
編譯原理 上下文無關文法
學完了詞法分析,我們知道詞法分析器將正規表示式轉換成詞法單元流,但對於這個記號流我們不知道是否能由正確的文法產生,因此我們需要通過語法分析器來檢測其合法性。語法分析器的輸出是一棵語法分析樹 無論顯性還是隱性 並且進行一些語法糾錯處理。語法分析的整個過程大概就是我們先定義乙個語法,再用相應的演算法來檢...
編譯原理 什麼是上下文無關文法?
上下文無關是指,一句話的含義與其前後的內容沒有或者幾乎沒有關係,只由自己決定,把它剪下到其他任何位置,也還是原有的意思。例如 a 0 這是乙個賦值語句,無論此語句的前後是什麼 此語句所代表的操作是確定的。即 給變數a賦予值0 換句話說,cpu遇到什麼語句就執行什麼語句,不用管其他的。程式語言為什麼不...