通过 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
。
我正在 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
。