0

我需要将表达式(字符串)分成几部分,并从它的组件中调用一个递归函数。表达式类似于: (a or b), or ((a and b) or c), or ((a and b) or (c or d)) (或者任何其他表达式,不管它有多少个括号. 运算符 and, or 代表两个函数( Reunion 和 Intersection )。

对于“((a和b)或(c或d))”,我必须调用Union(F(“(a和b”)),F(“(c或d)”))。F ( "(a and b)" ) 将是 Intersection("a","b") ... 等等。

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

提前致谢!

4

1 回答 1

1

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

它是这样的。有正则文法,它们可以被正则表达式引擎覆盖,其实现是一个众所周知的java正则表达式包。

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

如果你想了解这方面的理论背景,欢迎阅读维基百科的以下文章:)

正则语法

上下文无关语法

在任何情况下,您至少可以按照建议使用某种递归解析器,或者作为最低限度来查看“下推自动机”。

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

再次对于理论背景和示例,请参见以下文章

希望这可以帮助

于 2012-10-26T20:55:15.570 回答