如何在java中实现类C解析器

如何在java中实现类C解析器,java,parsing,syntax,tokenize,Java,Parsing,Syntax,Tokenize,我需要将类C脚本(实际上是Groovy)解析为几个部分,使用“(“,”)、“&&”和“| |”作为分隔符,如下所示: 从字符串 (boo == 1 && (foo == null || foo == 0)) 我需要像这样的列表 ["boo == 1", "&&", ["foo == null", "||", "foo == 0"] ] (list of 3 items, third one is a list too) 使用“foo==1”条件看起来很简

我需要将类C脚本(实际上是Groovy)解析为几个部分,使用“(“,”)、“&&”和“| |”作为分隔符,如下所示:

从字符串

(boo == 1 && (foo == null || foo == 0)) 
我需要像这样的列表

["boo == 1", "&&",  ["foo == null", "||", "foo == 0"]  ]
(list of 3 items, third one is a list too)
使用“foo==1”条件看起来很简单,但它也可以是“foo.item(2).contains('abcd')==true”(条件也可以包含大括号),我一直在使用它


实现这种解析器的最佳方法是什么?有什么有用的库或框架可以帮助我吗?在我的例子中,哪一个更容易呢?

实现这种解析器的最好、最干净的方法是使用类似JavaCC或ANTLR的解析器库。这样,您不仅可以得到一个列表,甚至可以得到一个包含整个层次结构的完整语法树

现在我正在阅读ANTLR文档,但对于我的任务来说,它看起来太复杂和困难了。假设我不需要完整的语法树,有没有更简单的方法?好吧,我一直在实现ANTLR语法。有人能为我的案例给出一个合适的语法吗?请看C++或java的语法,你可以删除其中的一些规则,使之适合你。