我需要将一个表达式(字符串)拆分为多个部分,并从其组件中调用递归函数。
表达式类似于:(a或b)或((a和b)或c),或((a和b)或(c或d))(或任何其他表达式,无论它有多少个括号。
运算符和或代表两个功能(团聚和相交)。
对于“(((a and b)),F(”(c和d)“)),我必须调用Union(F(”(a和b“)),F(”(c和d)“))。
F(“(a和b)”)将是Intersection(“ a”,“ b”)...依此类推。
我设法拆分了两个组成部分的表达式(“ a和b”),但是我无法处理更大的表达式。
提前致谢!
最佳答案
对您的问题的答案在于地道理论。它是关于语法和语言分类的。
就像这样有规则的语法,它们可以被reqular表达式引擎覆盖,例如,实现是众所周知的java regex包。
问题是您所描述的语言不是常规语言。因此,您不能在这里使用正则表达式引擎,它的功能还不够强大。它属于可以用无上下文语法(比常规语言组宽)描述的无上下文语言类别。
如果您需要一些理论背景,欢迎阅读Wikipedia的以下文章:)
Regular grammar
Context free grammar
无论如何,您至少可以使用某种递归解析器作为建议的内容,或者至少可以使用它来了解“下推自动机”。
自动机是一种可以解析语法的技术。对于常规语法而言,足以构建常规自动机,为解决上下文无关语法,您应构建下推式自动机。
再次获取理论背景和示例,请参见following文章
希望这可以帮助