预测分析中的错误恢复探讨
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
预测分析中的错误恢复探讨
李忠武;陈丽清
【摘要】探讨预测分析中的两种错误恢复模式:恐慌模式的恢复和短语层次的恢复.当栈顶的终结符号和下一个输入符号不匹配时,或者当非终结符号A处于栈顶,α是下一个输入符号,且M[A,α]为error(即相应的语法分析表条目为空)时,预测语法分析过程就可以检测到语法错误.
【期刊名称】《黑龙江科技信息》
【年(卷),期】2015(000)035
【总页数】1页(P33)
【关键词】栈顶;恐慌模式;短语层次;预测分析;语法分析
【作者】李忠武;陈丽清
【作者单位】保山学院,云南保山678000;保山学院,云南保山678000
【正文语种】中文
在进行预测分析过程中,当预测分析器报错时,表示输入的串不是句子。
对于使用者而言,希望预测分析器能够进行恢复处理后继续语法分析过程,以便在一次分析中找到更多的语法错误。
但是有可能恢复得并不成功,这后找到的语法错误有可能是假的。
进行错误恢复时可用的信息:栈里面的符号,待分析的符号。
预测分析中的错误恢复有两种方法:巩慌模式和短语层次的恢复。
1 恐慌模式的恢复
恐慌模式的错误恢复是基于下面的思想。
语法分析器忽略输入中的一些符号,直到出现由设计者选定的某个同步词法单元。
它的有效性依赖于同步集合的选取,选取这个集合的原则是应该使得语法分析器能够从实践中可能遇到的错误中快速恢复。
语法分析过程总是试图在输入的前缀中找到和某个非终结符号对应串;出现错误表明现在已经不可能找到这个非终结符号(程序结构)的串。
如果在编程错误仅仅局限于这个程序结构,那么我们可以考虑跳过这个程序结构,假装已经找到了这个结构,然后继续进行语法语法分析处理。
同步语法单元就是这个程序结构结束的标志。
非终结符号A的同步集合启发式规则:
a.FOLLOW(A)的所有非终结符号A的同步集合中,这些符号的出现可能表示之前的那些符号是错误的A的串;
b.将高层次的非终结符号对应串的开始符号加入到较低层次的非终结符号集合。
比如语句的开始符号,if,while等可以作为表达式的同步集合;
c.FIRST(A)中的符号加入到非终结符号A的同步集合,碰到这些符号时,可能意味着前面的符号是多余的符号;
d.在匹配时出现错误,可以直接弹出相应的符号。
那些符号需要确定同步集合需要根据特定的应用而定。
当按照常用的表达式文法(1)对表达式进行语法分析时,使用FIRST和FOLLOW符号作为同步集合就能够很好地完成任务。
生成表1所示的预测分析表。
表1中使用“synch”来表示由相应非终结符的后继符号得到的同步符号。
分析时,若发现M[A,a]为空,则跳过输入符号a;若该项为“同步”,则弹出栈顶的非终结符;栈栈顶的终结符号不匹配输入符号,则弹出栈顶终结符。
表1中发现语法错误时,除了使语法分析继续下去之外,还要形成诊断信息,向
程序员报告。
把FOLLOW(A)中的所有符号作为A的同步符号,跳过输入串中的
一些符号直至遇到这些“同步符号”,把A从栈中弹出,可使分析继续。
把FIRST(A)中的符号加到A的同步符号集,当FIRST(A)中的符号在输入中出现时,
可根据A恢复分析。
对于错误输入+id*+id,语法分析器以及表1中的错误恢复机制的工作过程如表2所示。
2 短语层次的恢复
短语级恢复策略的思想是发现错误时,法分析器对剩余的输入串做局部纠正,即用一个能使语法分析器继续工作的符号串来代替剩余输入串的前缀。
典型的局部纠正包括修改当前出错符号,删除出错符号或插入遗漏的符号。
使用这种错误恢复策略,,应仔细选择替换符号,以免引起死循环。
表1 加入同步符号的LL(1)分析表?
表2 对id*+i的语法分析与错误处理?
短语层次错误恢复的实现方法是在预测语法分析表的空白条目中填写指向处理例程的指针。
这些例程可以改变、插入或删除输入中的符号,并发出适当的错误消息。
它们也可能执行一些出栈操作。
结束语
总之,语法出错的情况主要是工作栈顶终结符与输入符号不匹配以及对应M[A,a]。
出错处理的方式首先是报告出错(出错位置、出错性质),然后进行出错处理,使语法分析继续下去。
参考文献
[1]陈火旺,刘春林,谭庆平,赵克佳,刘越.程序设计语言编译原理[M].北京:国
防工业出版社.
[2]赵建华,郑滔,戴新宇译.编译原理[M].北京:机械工业出版社.
[3]杜辉,郭兴华.编译程序中预测分析表的实现.。