【问题标题】:ANTLRv4: How can I check efficiently whether a sentence satisfies a given grammar?ANTLRv4:如何有效地检查一个句子是否满足给定的语法?
【发布时间】:2013-09-08 23:34:39
【问题描述】:

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

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

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

【问题讨论】:

    标签: parsing antlr4


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-02
      • 1970-01-01
      • 2023-02-01
      • 2018-04-11
      • 2015-12-09
      • 2017-10-30
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多