4

在基于命令行的应用程序中,我想为过滤数据库结果提供基本支持。为此,我需要解析用户输入。我想支持这些令牌:

  • 布尔(逻辑)运算符,包括、and和括号ornot
  • 变量、字符串、日期和数字
  • 比较运算符:=, !=, <, >, >=,<=

所以输入字符串可能如下所示:

(age > 3 or name != 'tom') and city='london' and ((birthday=01.01.2010 orbirthday >= 01.01.2013))

基本的东西。

问题:我在哪里可以获得(标记器和)解析器?

  • 是否已经有支持这些基础知识的库?
  • 如果没有,我知道有一些工具可以为 Tokenizers 和 Parsers 生成 Java 类。你有什么建议?

然后我会将结果转换为 JPAPredicateCriteriaQuery. 首先我想,我可以在命令行中提供 JPQL,让用户指定基于 SQL 的限制。但我不想让用户编写可能停止工作的条件,例如当数据库架构更改时。

4

1 回答 1

1

您正在寻找一些分词器和解析器。

ANTLR 是一个词法分析器/解析器生成器,并且是一个巨大的语法存储库,其中还包含 SQL——甚至在https://github.com/antlr/grammars-v4/tree/master/sql上包含一些常见数据库的方言。

因此,如果您仍然有这个问题,您可以免费生成解析器,只需关心将抽象语法树转换为 JPA 标准调用。

于 2020-10-29T12:41:06.090 回答