什麼是遞迴下降分析器?
遞迴下降分析器使用自頂向下分析的技術,不進行回溯。它可以被定義為一個使用各種遞迴過程來處理輸入字串而無需回溯的分析器。它可以使用遞迴語言簡單地執行。產生式右部字串的第一個符號將唯一地確定要選擇的正確備選方案。
遞迴下降分析的主要方法是將每個非終結符與一個過程關聯起來。每個過程的目標是讀取可以由相應非終結符產生的輸入字元序列,並返回指向該非終結符的語法樹根的指標。過程的結構由等效非終結符的產生式規定。
如果在有效地執行過程呼叫的語言中編寫,則遞迴過程可以很容易編寫並且足夠有效。語法中的每個非終結符都有一個過程。它可以考慮一個全域性變數 lookahead,儲存當前的輸入標記,以及一個過程 match(預期標記),這是在解析過程中識別下一個標記並推進輸入流指標的動作,使得 lookahead 指向要解析的下一個標記。Match() 有效地呼叫詞法分析器來獲取下一個標記。
例如,輸入流為 a + b$。
lookahead == a
match()
lookahead == +
match ()
lookahead == b
……………………….
……………………….
透過這種方式,可以完成解析。
示例 - 在以下語法中,第一個符號,即 if、while 和 begin 唯一地確定了要選擇的備選方案。
因為以 if 開頭的語句將是條件語句,而以 while 開頭的語句將是迭代語句。
Stmt → If condition then Stmt else Stmt
| While condition do Stmt
| begin Stmt end.
示例 - 使用遞迴過程編寫演算法來實現以下語法。
E → TE′
E′ → +TE′
T → FT′
T′ →∗ FT′|ε
F → (E)|id
遞迴下降分析的一個主要缺點是它只能在支援遞迴過程呼叫的語言中實現,並且它存在左遞迴問題。