[英]Determining whether string complies with ANTLR4 grammar
编辑:您看到的是词法分析器错误,而不是解析器错误。 您需要更新词法分析器以确保词法分析器无法通过添加以下作为词法分析器的最后一个规则来匹配输入字符。 这会将错误的字符传递给解析器进行处理(报告,恢复等)。
ERR_CHAR : . ;
除此之外,您还需要执行以下常规步骤,这些步骤适用于配置解析器以进行简单的字符串识别。
您需要做两件事才能使其正常工作:
首先,禁用默认错误报告机制。
parser.removeErrorListeners();
其次,禁用默认的错误恢复机制。
parser.setErrorStrategy(new BailErrorStrategy());
如果您的字符串不匹配,您将获得ParseCancellationException
,而不会收到其他报告。
如果您没有使用解析操作的输出,您可能还希望通过禁用解析树构造来提高识别过程的效率。
parser.setBuildParseTree(false);
快速而肮脏的解决方案......
Parser p = new MyParser(myTokenStream);
p.rootRule();
if (p.getNumberOfSyntaxErrors() > 0) {
throw new RuntimeException("Syntax error!");
}
如果存在不会导致解析器混淆的词法错误(例如无关输入),这将无法帮助您,因为语法错误的数量仍然为零。
如果您不想使用ErrorListener并且不关心解析器可以解决的某些词法错误,那么这是一个很好的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.