java中的split括号表达式

时间:2012-10-26 20:35:47

标签: java expression

我需要分割一个表达式(String)并从它的组件中调用一个递归函数。 表达式类似于:(a或b),或((a和b)或c),或((a和b)或(c或d))(或任何其他表达式,无论它有多少括号。 运算符和/或代表两个函数(Reunion和Intersection)。

对于“((a和b)或(c或d))”我必须调用Union(F(“(a和b”)),F(“(c或d)”))。 F(“(a和b)”)将是交点(“a”,“b”)......依此类推。

我设法分割了两个组件表达式(“a和b”),但是我无法处理更大的表达式。

提前致谢!

1 个答案:

答案 0 :(得分:1)

你的问题的答案在于authomata理论。它关于语法和语言分类。

就是这样。有常规语法,它们可以被reqular表达引擎覆盖,例如,该实现是一个众所周知的java regex包。

问题在于您所描述的语言不是常规语言。所以,你不能在这里使用正则表达式引擎,它只是不够强大。它属于上下文无关语言的类别,可以通过无上下文语法来描述(比常规语言组更广泛)。

如果您想了解一些理论背景,欢迎阅读维基百科的以下文章:)

Regular grammar

Context free grammar

在任何情况下,您至少可以使用某种递归解析器作为建议,或者至少可以看一下“下推自动机”。

Automata是一种可以解析语法的技术。对于常规语法,它足以构建一个常规自动机,为了解决上下文无关语法,你应该构建一个下推自动机。

再次了解理论背景和示例,请参阅following文章

希望这有帮助

相关问题