我正在为我的编译器类做一些预考试练习,并且需要简化这个正则表达式.
(a U b)*(a U e)b* U (a U b)*(b U e)a*
Run Code Online (Sandbox Code Playgroud)
很明显,e是空字符串,U代表联合.
到目前为止,我认为其中一个(a U b)*可以被移除,因为U a = a的并集.但是,我找不到任何其他简化,到目前为止其他问题做得不好.:(
感谢任何帮助,非常感谢!
正则表达式有点生疏,但如果 * 仍然代表“零次或多次出现”,您可以替换:
(a U e)b* for (a U b)*
Run Code Online (Sandbox Code Playgroud)
其中第一部分为:
(a U b)*(a U b)* = (a U b)*
Run Code Online (Sandbox Code Playgroud)
在右侧,你有那个
(b U e)a* = (b U a)*
Run Code Online (Sandbox Code Playgroud)
现在,由于 a U b = b U a,您可以得到:
(a U b)*(a U b)*
Run Code Online (Sandbox Code Playgroud)
在右侧,只剩下
(a U b)* U (a U b)* = (a U b)*
Run Code Online (Sandbox Code Playgroud)
我想就是这样...