在基于命令行的应用程序中,我想为过滤数据库结果提供基本支持。为此,我需要解析用户输入。我想支持这些令牌:
- 布尔(逻辑)运算符,包括、
and
和括号or
not
- 变量、字符串、日期和数字
- 比较运算符:
=
,!=
,<
,>
,>=
,<=
所以输入字符串可能如下所示:
(age > 3 or name != 'tom') and city='london' and ((birthday=01.01.2010 orbirthday >= 01.01.2013))
基本的东西。
问题:我在哪里可以获得(标记器和)解析器?
- 是否已经有支持这些基础知识的库?
- 如果没有,我知道有一些工具可以为 Tokenizers 和 Parsers 生成 Java 类。你有什么建议?
然后我会将结果转换为 JPAPredicate
的CriteriaQuery
. 首先我想,我可以在命令行中提供 JPQL,让用户指定基于 SQL 的限制。但我不想让用户编写可能停止工作的条件,例如当数据库架构更改时。