2010-10-31 113 views
0

我是yacc/lex的新手,我正在研究其他人编写的解析器。我注意到,当找到一个未定义的标记时,解析器返回一个错误并停止。有没有一种简单的方法可以让它完全忽略它无法解析的线条,而只是转向下一个线条呢?忽略yacc/lex中的错误

回答

1

只需添加一个规则,看起来像

. { 
    // do nothing 
} 

在所有规则的底部,它会忽略它涉及跨一切不符合任何以前的规则。

编辑:如果您有多个状态,那么一个包罗万象的,在任何状态下工作会那么看起来像:

<*>. { 

} 
+0

谢谢,但我仍然不能完全肯定这个地方应该去 - 我试着把它放在我的lex和parser文件中 - 当我试图把它放在lex文件中时,yacc返回了一个错误,它只是没有做任何事情。你能详细说明一下吗?谢谢。 – Udi 2010-10-31 16:34:50

+0

它只是低于你有的任何其他规则;例如,如果你只有两个令牌可以识别,并且你想忽略其他所有的东西,那么你会有两条规则,然后把所有的东西放在同一个块中,但只要确保它低于其他规则,因此它具有最低优先级。 – AwesomeJosh 2010-10-31 17:34:13

+0

期间只匹配任何单个字符,并且如果代码块为空,它将只匹配与其他规则不匹配的所有内容,然后执行代码块中的内容(即没有任何内容)。 – AwesomeJosh 2010-10-31 17:36:17