如何让YACC类型的解析器在最短的匹配输入上停止?

时间:2011-11-17 17:17:32

标签: parsing stream grammar yacc ply

这是上下文:我有一个文件(或流),我想处理它的标题,停止,然后以不同的方式处理其余的数据。也就是说,假设我有一个像BEGIN GOOD GOOD GOOD GOOD GOOD DONE JUNK JUNK JUNK JUNK ...这样的流。第一部分(BEGIN GOOD+ DONE)符合我的语法,我想在看到DONE后立即停止。

AFAIK,YACC和朋友们希望继续使用令牌,直到没有更多,因此我必须编写更多语法来匹配所有JUNK。有没有解决的办法?

我正在使用PLY(Python的Lex和Yacc实现),但我在这里可以得到一般答案。

1 个答案:

答案 0 :(得分:1)

在正常的yacc中,您可以在操作中使用yacc宏YYACCEPT来立即返回成功的解析,而无需再读取任何令牌。然而,我不知道PLY是否支持这一点。