美文网首页
编译器笔记18-语法分析-LR分析中的错误处理

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

作者: 衣忌破 | 来源:发表于2019-11-24 23:46 被阅读0次

LR分析中的错误处理

  • 语法错误的检测
    当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

相关文章

网友评论

      本文标题:编译器笔记18-语法分析-LR分析中的错误处理

      本文链接:https://www.haomeiwen.com/subject/iygrwctx.html