編譯方式:將高級(jí)語言轉(zhuǎn)換成機(jī)器語言,再執(zhí)行
解釋方式:直接執(zhí)行,不產(chǎn)生中間語言(機(jī)器語言)
0型文法:對(duì)左部和右部沒有任何限制
1型文法(上下文有關(guān)文法):一個(gè)單詞是否可以出現(xiàn)在特定位置上要依賴于上下文
2型文法(上下文無關(guān)文法):左部是單個(gè)非終結(jié)符,右部是終結(jié)符和非終結(jié)符組成的符號(hào)串
3型文法(右線性文法/正規(guī)文法):對(duì)2型文法進(jìn)一步的限制,右部只能是單一終結(jié)符或單一終結(jié)符跟著一個(gè)單一非終結(jié)符
自上而下分析方法:從文法的識(shí)別符出發(fā),看能否推導(dǎo)出待檢查的符號(hào)串,若能,則說明該符號(hào)串是一個(gè)句子。
自下而上分析方法:從待檢查的符號(hào)串出發(fā),看最終能否歸約到文法的識(shí)別符號(hào)。
LL(k)是一種自上而下的語法分析方法,從文法出發(fā),生成句子的最左推導(dǎo)。從左向右,每次向前查看k個(gè)字符。
自下而上分析方法是一種“移進(jìn)-歸約”方法LR(k)。按從左至右掃描輸入串,并自下而上的歸約。至多查看k個(gè)輸入,判斷是移進(jìn)還是歸約。若是歸約,則能唯一地選中一個(gè)產(chǎn)生式去歸約已經(jīng)識(shí)別出的句柄。
比較:
- 復(fù)雜度
LL更簡潔 - 普適性
LR文法能夠支持更多上下文無關(guān)文法(LL文法需要消除左遞歸) - 錯(cuò)誤恢復(fù)
LL語法分析器有更好的上下文信息,更容易恢復(fù)