当LR语法分析器在查询语法分析动作表并发现一个报错条目时,它就检测到了一个语法错误,在查询GoTo表时不会发现语法错误,如果当前已扫描的输入部分不可能存在正确的后续符号串,LR的输入符号语法分析表就会立刻报错。但绝不会把一个错误的输入符号移入到栈中。

(1)恐慌模式

  恐慌模式的错误恢复策略:

  我们从栈顶向下扫描,直到发现某个状态s,它有一个对应于某个非终结符A的GoTo目标,然后我们丢弃零个或多个输入符号,直到发现一个可能合法地跟在A之后的符号a为止,之后语法分析器将GoTo(s,A)压入栈中,继续进行正常的语法分析。

(2)短语层次的错误恢复

  实现短语层次的错误恢复策略:检查LR语法分析表中的每个报错条目,并根据语言的使用方法来决定程序员所犯的何种错误最可能引起这个语法错误。然后构造出适当的恢复过程,通常会根据各个报错条目来确定适当的修改方法,修改栈顶状态和第一个输入符号。

  出现在诊断点之前的情况。

(3)出错产生式策略

  如果对经常遇到的错误有很清楚的了解,   可以扩充语言的文法,增加产生错误结构的产生式。然后用由这些错误产生式扩充的文法构造语法分析器。如果语法分析器使用了出错产生式,就可以产生适当的错误诊断信息,指出在输入字符串中识别出的错误结构。

(4)全局纠正策略

  一个理想的编译器是在处理不正确的输入字符串时做尽可能少的改动。有一些算法可以选择最小的修改序列,以获得全局代价最小的错误纠正。但是实现这些算法的时间和空间开销太大,目前只是进行了一些理论上的探讨。

 

转自:http://blog.163.com/ppt_compiler/blog/static/20281300720125101120380/

posted on 2013-08-04 17:29  RexfieldVon  阅读(1520)  评论(0编辑  收藏  举报