1

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

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

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

4

1 回答 1

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 书中描述的两阶段解析策略。

于 2013-09-08T03:14:05.207 回答