有没有办法在语法中指定我想跳过所有不符合任何规则的输入(否则会引发识别错误)?
答案 0 :(得分:1)
是。实施取决于您需要/想要跳过的地方。
在词法分析器中,最后一条规则如下:
Unknown : . -> skip ; // or -> channel(HIDDEN) ;
将使用任何其他不匹配的输入字符,但不会被解析器标记和考虑。您确实希望一次匹配一个字符,以便在每个输入文本索引处,所有其他词法分析规则都有机会先匹配。
同样,在解析器中,最后一条规则如:
ignored : . ;
将使用不匹配的标记,创建解析树节点,每个节点都包含一个包含单个“忽略”标记的上下文。然后,他们在解析树中的存在可以被忽略。
同样,被忽略的规则匹配应仅针对单个令牌,确保所有其他更长匹配规则具有优先级,并且最后在规则的排序中,确保首先考虑所有其他单个令牌匹配规则。