通过 Antlr 中的 .g4 文件处理外部对象

Working with external objects through .g4 file in Antlr

我正在 Java 中实现一个数据库,需要创建一个 Antlr 解析器来处理这样的查询字符串:

(category(Chinese) || category(Italian)) && price <= 2 

我已经为我的数据库实现了一个方法 Set<String> category(String regex),其中 returns 一组匹配给定文本的餐馆名称,但我不知道如何从我的解析器中的一些特定规则。

我希望我的 .g4 文件中必须有一个参数来接收我的 Java 数据库对象,但是使用 @parser::members{} 似乎只对初始化对象有用。

如有任何帮助,我们将不胜感激!

这是我在 Whosebug 上的第一个 post,如果不够清楚,请见谅

如果您想将 Set 提供给解析器,以便可以在其中访问它,您可以执行以下操作:

@parser::members {private Set<String> mySet;
    public MyParser(CharStream input, Set<String> theSet) {
        this(input);
        mySet = theSet;
    }
}

然后您可以在解析期间访问任何解析器操作中的相应 mySet。但是,您需要考虑使用正确的构造函数。

您可能还需要将相应的 import 语句放入 @parser::header