我需要分割一个表达式(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”),但是我无法处理更大的表达式。
提前致谢!
答案 0 :(得分:1)
你的问题的答案在于authomata理论。它关于语法和语言分类。
就是这样。有常规语法,它们可以被reqular表达引擎覆盖,例如,该实现是一个众所周知的java regex包。
问题在于您所描述的语言不是常规语言。所以,你不能在这里使用正则表达式引擎,它只是不够强大。它属于上下文无关语言的类别,可以通过无上下文语法来描述(比常规语言组更广泛)。
如果您想了解一些理论背景,欢迎阅读维基百科的以下文章:)
在任何情况下,您至少可以使用某种递归解析器作为建议,或者至少可以看一下“下推自动机”。
Automata是一种可以解析语法的技术。对于常规语法,它足以构建一个常规自动机,为了解决上下文无关语法,你应该构建一个下推自动机。
再次了解理论背景和示例,请参阅following文章
希望这有帮助