编译原理的应用

编译原理的应用

问题描述:

这两天在研究复杂查询的实现,想把普通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 自己去看吧