ANTLRv4:我怎样才能有效地检查句子是否满足给定的语法?(ANTLRv4: How can I

2019-10-18 14:25发布

这个问题是基本够​​用。 如果我有一个句子和语法我怎么能有效地检查这句话是否是语法的一部分。 通过有效的方式我的意思是,它使用的计算/资源量最小的方式。 这里就是我所做的。 我实现了一个类ErrorListener延伸已经定义BaseErrorListener 。 这个类ErrorListener有单场boolean error ,它告诉我们,在分析阶段是否遇到解析错误。 在一开始error被设置为false ,并更新到truepublic void syntaxError(...)被调用。 之前也解析器的起始状态被调用语句

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

叫做。 所以在运行一些测试中,我指出后认为,这种做法可能不会特别是如果这形成为查询的最佳之一。 所以我想知道有没有做这一切的另一种方式?

Answer 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本书descibed两阶段分析策略。



文章来源: ANTLRv4: How can I check efficiently whether a sentence satisfies a given grammar?