确定字符串是否符合ANTLR4语法

Bra*_*ace 3 java validation antlr4

如何根据我的语法测试一个字符串,看它是否有效(即没有发现错误,并且不需要进行错误恢复)?

我已经尝试过这个以及自定义错误策略,但我仍然会收到类似的消息

第1:2行令牌识别错误:'x'

在控制台上.所以我需要一种方法来确保所有错误导致异常,或者一种方法来验证不依赖于异常的输入.

Sam*_*ell 5

编辑:您看到的是词法分析器错误,而不是解析器错误.您需要更新词法分析器以确保词法分析器无法通过添加以下作为词法分析器的最后一个规则来匹配输入字符.这会将错误的字符传递给解析器进行处理(报告,恢复等).

ERR_CHAR : . ;
Run Code Online (Sandbox Code Playgroud)

除此之外,您还需要执行以下常规步骤,这些步骤适用于配置解析器以进行简单的字符串识别.


您需要做两件事才能使其正常工作:

首先,禁用默认错误报告机制.

parser.removeErrorListeners();
Run Code Online (Sandbox Code Playgroud)

其次,禁用默认的错误恢复机制.

parser.setErrorStrategy(new BailErrorStrategy());
Run Code Online (Sandbox Code Playgroud)

ParseCancellationException如果您的字符串不匹配,您将获得一个,而不会有其他报告.

如果您没有使用解析操作的输出,您可能还希望通过禁用解析树构造来提高识别过程的效率.

parser.setBuildParseTree(false);
Run Code Online (Sandbox Code Playgroud)