跳过Antlr中不匹配的输入

跳过Antlr中不匹配的输入,antlr,antlr4,Antlr,Antlr4,是否有一种方法可以在语法中指定我要跳过所有与任何规则都不匹配的输入(否则会引发识别错误)?是。实现取决于您需要/想要在何处执行跳过 在lexer中,最后一条规则如下: Unknown : . -> skip ; // or -> channel(HIDDEN) ; ignored : . ; 将使用任何其他不匹配的输入字符,但不允许语法分析器标记和考虑这些字符。您确实希望一次匹配一个字符,以便在每个输入文本索引中,所有其他lexer规则都有机会首先匹配 类似地,在解析器中,最后一

是否有一种方法可以在语法中指定我要跳过所有与任何规则都不匹配的输入(否则会引发识别错误)?

是。实现取决于您需要/想要在何处执行跳过

在lexer中,最后一条规则如下:

Unknown : . -> skip ; // or -> channel(HIDDEN) ;
ignored : . ;
将使用任何其他不匹配的输入字符,但不允许语法分析器标记和考虑这些字符。您确实希望一次匹配一个字符,以便在每个输入文本索引中,所有其他lexer规则都有机会首先匹配

类似地,在解析器中,最后一条规则如下:

Unknown : . -> skip ; // or -> channel(HIDDEN) ;
ignored : . ;
将使用不匹配的令牌,创建解析树节点,每个节点作为包含单个“忽略”令牌的上下文。它们在解析树中的存在可以被忽略

同样,被忽略的规则匹配应该只针对单个令牌,确保所有其他较长的匹配规则具有优先级,并在规则的顺序中处于最后一位,确保所有其他单个令牌匹配规则都被优先考虑