编译原理的应用
问题描述:
这两天在研究复杂查询的实现,想把普通sql的写法,转成criteria的写法。没想出一个好的方法,特抛砖一块,呵呵。
((name='test1' or name='test2') and (age>20 and age<30)) and sex='1'
这个对应的结果是这样的
Ex.and(Ex.and(Ex.or(name='test1',name='test2'),Ex.and(age>20,age<30)),sex='1')
怎么能使用程序自动解析并得到结果呢?
初步想法是,通过编译原理的方式进行解析,组装成一棵树,然后对树进行遍历。
问题补充:
这两天在研究复杂查询的实现,想把普通sql的写法,转成criteria的写法。没想出一个好的方法,特抛砖一块,呵呵。
((name='test1' or name='test2') and (age>20 and age<30)) and sex='1'
这个对应的结果是这样的
Ex.and(Ex.and(Ex.or(name='test1',name='test2'),Ex.and(age>20,age<30)),sex='1')
怎么能使用程序自动解析并得到结果呢?
初步想法是,通过编译原理的方式进行解析,组装成一棵树,然后对树进行遍历。
直接使用了hibernate中的HqlParser,得到AST。问题解决。整个复杂查询终于实现,当然中间采用了不少的约定。
另:对参与运算的value需要做类型转换,感觉实在无奈!
感谢sdh5724和cats_tiger的回答。
答
直接用antlr就可以。
答
JAVACC, ANTLR 自己去看吧