? ? ? 目的:為輸入字符串尋找最左推導(dǎo),或者說,從根節(jié)點(diǎn)開始,自上而下,從左到右地為輸入字符串建立一棵分析樹,并預(yù)先確定的順序創(chuàng)建分析樹的節(jié)點(diǎn)。
1、預(yù)測語法分析器的狀態(tài)轉(zhuǎn)換圖
? ? 預(yù)測語法分析器,每一個非終結(jié)符都對應(yīng)一個狀態(tài)轉(zhuǎn)換圖,邊上的標(biāo)記是記號和非終結(jié)符。記號上的轉(zhuǎn)換意味著如果該記號是下一個輸入符號,就應(yīng)進(jìn)行該轉(zhuǎn)換。
2、非遞歸的預(yù)測分析
? ? 表驅(qū)動的預(yù)測語法分析器有一個輸入緩沖區(qū)、一個棧、一張分析表和一個輸出流。輸入緩沖區(qū)包含要分析的串,后面跟一個符號$,$是輸入串的結(jié)束標(biāo)記。棧是用來存放文法符號序列。棧底符號是$。分析表示一個二維數(shù)組M[A,a],A是非終結(jié)符,a是終結(jié)符或者$。
? ? 算法 非遞歸的預(yù)測分析
? ? FIRST和FOLLOW
? ? 算法 構(gòu)造預(yù)測分析法
? ? LL(1)文法
3、預(yù)測分析的錯誤恢復(fù)
? ? ? 緊急方式錯誤恢復(fù)主要思想:跳過一些輸入符號,直到期望的同步記號中的一種出現(xiàn)為止。主要依賴于同步記號集合的選擇。這個選擇可以使得語法分析器能迅速地從實(shí)際可能發(fā)生的錯誤中恢復(fù)過來。