語法分析
任務:根據語法規則 (即語言的文法),分析並識別出各種語法成分,如表達式、各種說明、各種語句、過程、函數等,並進行語法正確性檢查.
與詞法分析的區別:
- 詞法分析(3型, 正則文法), 語法分析(2型, 上下文無關文法)
- 字母表區別: 詞法(字符串), 語法(符號串)
自頂向下分析: 推導(Derivations)
自底向上分析: 規約(Reductions)
自底向上: 主要問題:
- 句柄識別問題: 算符優先分析法
自頂向下: 主要問題:
-
二義性問題:
用優先級層次定義文法
-
左遞歸問題(導致死循環):
U::=xy ∣ xw ∣...∣ xy改寫爲U::=x(y ∣ w ∣...∣ z).
U::=x ∣ xy改寫爲U::=x(y ∣ ε).
U::=x ∣ y ∣...∣ z ∣ Uv改寫爲U::=x(x ∣ y ∣...∣ z){v}.
-
回溯問題(導致費時)
保證 FIRST(ai)⋂FIRST(aj)=ϕ(i=j).
相交則提取左因子
必要時,可以超前掃描,預讀下一個字符.
遞歸子程序法(遞歸下降分析法): 對每一個非終結符都建立一個子程序