LR分析中的错误处理
-
语法错误的检测
当LR分析器在查询分析表并发现一个报错条目时,就检测到了一个语法错误。 -
错误恢复策略
恐慌模式错误恢复
短语层次错误恢复
恐慌模式错误恢复

- 从栈顶向下扫描,直到发现某个状态si,它有一个对应于某个非终结符A的GOTO目标,可以认为从这个A推导出的串中包含错误。
- 然后丢弃0个或多个输入符号 ,直到发现一个可能合法地跟在A之后的符号a 为止。
- 之后将s i+1 =GOTO(si, A) 压入栈中,继续进行正常的语法分析。

-
初始状态0含义是它期待读入一个运算分量的第一个符号,此符号可以是一个id也可以是( 。若读入的是+ * $则说明此时会出现缺少运算分量的错误。于是就会调用错误处理例程e1。若读入的括号是),则会出现括号不匹配得错误,调用错误处理例程e2,e2忽略掉)然后继续进行分析。
-
状态2 状态4 状态5 它们的情况跟状态0是类似的。都是在期待读入运算符号的第一个分量,因此它们的错误处理方法也是一样的。
-
状态1它在期待读入一个$或者是一个运算符+或*,若读入的是一个(或id会出现缺少运算符错误。此时就会调用错误处理例程e3。若读入的是)则会调用错误处理例程e2将)忽略。
-
状态3 7 8 9都包含归约项目,因此当它们都如非法的符号时它们就采取归约动作,这种恢复的方法可能会延迟错误的发现,但是此错误会在任何移入操作之前被发现。

网友评论