2020-编译原理-Parser5-错误恢复

错误恢复

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

2020-编译原理-Parser5-错误恢复
https://spricoder.github.io/2021/01/16/2020-Compilation-Principle/2020-Compilation-Principle-Parser5-%E9%94%99%E8%AF%AF%E6%81%A2%E5%A4%8D/
作者
SpriCoder
发布于
2021年1月16日
许可协议