语法分析
任务:根据语法规则 (即语言的文法),分析并识别出各种语法成分,如表达式、各种说明、各种语句、过程、函数等,并进行语法正确性检查.
与词法分析的区别:
- 词法分析(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).
相交则提取左因子
必要时,可以超前扫描,预读下一个字符.
递归子程序法(递归下降分析法): 对每一个非终结符都建立一个子程序