编译器笔记18-语法分析-LR分析中的错误处理

2019-11-24  本文已影响0人  衣忌破

LR分析中的错误处理

恐慌模式错误恢复

恐慌模式错误恢复.png
  1. 从栈顶向下扫描,直到发现某个状态si,它有一个对应于某个非终结符A的GOTO目标,可以认为从这个A推导出的串中包含错误。
  2. 然后丢弃0个或多个输入符号 ,直到发现一个可能合法地跟在A之后的符号a 为止。
  3. 之后将s i+1 =GOTO(si, A) 压入栈中,继续进行正常的语法分析。
例-算数表达式文法的LR分析器.png
  1. 初始状态0含义是它期待读入一个运算分量的第一个符号,此符号可以是一个id也可以是( 。若读入的是+ * $则说明此时会出现缺少运算分量的错误。于是就会调用错误处理例程e1。若读入的括号是),则会出现括号不匹配得错误,调用错误处理例程e2,e2忽略掉)然后继续进行分析。

  2. 状态2 状态4 状态5 它们的情况跟状态0是类似的。都是在期待读入运算符号的第一个分量,因此它们的错误处理方法也是一样的。

  3. 状态1它在期待读入一个$或者是一个运算符+或*,若读入的是一个(或id会出现缺少运算符错误。此时就会调用错误处理例程e3。若读入的是)则会调用错误处理例程e2将)忽略。

  4. 状态3 7 8 9都包含归约项目,因此当它们都如非法的符号时它们就采取归约动作,这种恢复的方法可能会延迟错误的发现,但是此错误会在任何移入操作之前被发现。

带有错误处理子程序的算术表达式文法LR分析表.png
上一篇 下一篇

猜你喜欢

热点阅读