![](/img/trans.png)
[英]Automata Regular expression - difference between concatenation & union
[英]Automata - Regular Expression (Union Case)
正则表达式不像有限状态解析器,尝试将它们合并到复杂的解析场景中通常是错误的。
而且,它们还是解决特定问题的绝佳工具。 阅读您的描述性需求后,有一个简单的正则表达式可以完成它,但方式可能出乎您的意料。 您的要求:
至少有 2 个 a 的字符串
至少有 2 个 b 的字符串
两者的并集,或至少有两个 a 或两个 b 的字符串
([ab]).*?\\1
此表达式打开一个捕获组以捕获 a 或 b。 然后它允许零个或多个“任何字符”后跟捕获组中捕获的任何字符 (\\1)。
任何语言都没有“一个”自动机或“一个”正则表达式; 通常有许多合理的和更多(可能无限多)不合理的。 从这个意义上说,您的问题并不完全恰当:对应于两个 DFA 联合的正则表达式可能看起来也可能不像原始 DFA 的正则表达式,+'ed 在一起。
所以,如果你的意思是,它们看起来能一样吗,答案很可能是肯定的。 如果你的意思是,它们必须看起来一样,答案可能是否定的。 相反,如果您想要修复构建联合机和获取正则表达式的算法,也许我们可以证明固定的方法总是给出相同的答案。
在您的具体情况下,应用笛卡尔乘积机构造为原始 DFA 的并集获得 DFA,然后根据 DFA 和 RE 之间的等价性证明应用该构造,我们可以看到通过 +' 获得的 RE 的结构无法从 DFA 开始获取原始 RE; 您需要 NFA 才能在 LHS 和 RHS 之间获得 +,但 DFA 只能在单个符号之间进行 +,而不能在子表达式之间进行。 当然,可以对 RE 进行代数运算来导出目标 RE,但这并不完全相同。
以上所有内容都适用于 RE 的平等问题。 但是,您询问了等效性。 如果两个 RE 生成相同的语言,我们几乎总是说它们是等价的。 如果这就是你的意思,那么是的,+ing 两个 RE 将给出一个 RE 等同于通过构建联合机并从中派生 RE 获得的 RE。 RE 看起来不一样,但会生成相同的语言,就像 (ab + e)(abab)* 和 (ab)* 尽管看起来有点不同但生成相同的语言一样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.