错误恢复
- 恐慌(Panic)模式:丢弃输入、调整状态、假装成功
- 丢弃输入:不断调用词法分析器,直到找到下一个分号
- 调整状态:不断出栈,直到找到一个状态s满足 G o t o [ s , S t m t ] ∉ e r r o r Goto[s, Stmt]\not\in error Goto[s,Stmt]∈error
- 假装成功:将状态 G o t o [ s , S t m t ] Goto[s, Stmt] Goto[s,Stmt]压栈,恢复语法分析过程
- 分号作为语句分隔符,可用作同步单词(Synchronizing Word)
- 终结符a作为非终结符A的同步单词(如, a ∈ F o l l o w ( A ) a\in Follow(A) a∈Follow(A)),跳出错误时,可能选择跳出的粒度比较小,导致没有实际从错误中跳出,也可能会跳过过多的部分。
- 可为多个非终结符A设置相应的同步单词a