ANTLRv4:如何有效地检查句子是否满足给定的语法?

时间:2013-09-06 18:47:48

标签: parsing antlr4

这个问题很基础。如果我有一个句子和一个语法,我怎样才能有效地检查这句话是否是语法的一部分。通过有效的方式,我的意思是使用最少量的计算/资源的方式。这就是我做的。我实现了一个类ErrorListener,它扩展了已定义的BaseErrorListener。此类ErrorListener具有单个字段boolean error,它告诉我们在解析阶段是否遇到解析错误。在开始时error设置为false,并在调用true时更新为public void syntaxError(...)。此外,在解析器的启动状态之前调用语句

ErrorListener listener = new ErrorListener();
parser.removeErrorListeners();
parser.addErrorListener(listener);

被召唤。因此,在运行一些测试后,我表示认为这种方法可能不是最佳方法,特别是如果它是作为查询形成的。所以我想知道还有另一种做法吗?

1 个答案:

答案 0 :(得分:1)

从以下开始消耗最少的资源:

parser.removeErrorListeners();
parser.setErrorStrategy(new BailErrorStrategy());
try {
    parser.ruleName();
    System.out.println("The sentence was contained in the grammar.");
} catch (ParseCancellationException) {
    System.out.println("The sentence was not contained in the grammar.");
}

然后更新它以使用ANTLR 4书中描述的两阶段解析策略。