在基于命令行的应用程序中,我想为过滤数据库结果提供基本支持。为此,我需要解析用户输入。我想支持这些令牌:
and
,or
,not
和括号=
,!=
,<
,>
,>=
,<=
因此输入字符串可能如下所示:
(年龄> 3或姓名!='tom')和city ='london'和((生日= 01.01.2010或生日&gt; = 01.01.2013))
基本的东西。
问题:我在哪里获得(tokenizer和)解析器?
然后,我会将结果转换为Predicate
的JPA CriteriaQuery
s。首先我想,我可以在命令行中提供JPQL,并让用户指定基于SQL的限制。但我不想让用户写下可能会停止工作的条件。 G。当数据库架构发生变化时。
答案 0 :(得分:1)
您要搜索一些标记器和解析器。
ANTLR是一个词法分析器/解析器生成器,并且庞大的语法存储库还包含SQL-甚至包含https://github.com/antlr/grammars-v4/tree/master/sql上一些常见数据库的方言。
因此,如果仍然存在该问题,则可以免费生成解析器,只需关心将抽象语法树转换为JPA标准调用即可。