Regex 如何获得基于正则语法的正则表达式?
问题是 正则文法G的生成规则是Regex 如何获得基于正则语法的正则表达式?,regex,regular-language,formal-languages,Regex,Regular Language,Formal Languages,问题是 正则文法G的生成规则是 S → 0A | 1B | ε , A → 1B | ε , B → 0A |ε, 将L(G)表示为正则表达式 我的解决办法如下 S = 0A + 1B+ ε A = 1B + ε B = 0A + ε 然后 我不知道如何在这里简化表达式。在此领域的任何帮助都将不胜感激。我们首先写出一些方程式: S = 0A + 1B + e A = 1B + e B = 0A + e 我们可以通过替换来消除B: S = 0A + 1(0A + e)+ e = 0A +
S → 0A | 1B | ε , A → 1B | ε , B → 0A |ε,
将L(G)表示为正则表达式
我的解决办法如下
S = 0A + 1B+ ε
A = 1B + ε
B = 0A + ε
然后
我不知道如何在这里简化表达式。在此领域的任何帮助都将不胜感激。我们首先写出一些方程式:
S = 0A + 1B + e
A = 1B + e
B = 0A + e
我们可以通过替换来消除B:
S = 0A + 1(0A + e)+ e = 0A + 10A + 1 + e
A = 1(0A + e)+ e = 10A + 1 + e
B = 0A + e
S = (0 + 10)(10)*(1 + e) + 1 + e
A = (10)*(1 + e)
B = 0(10)*(1 + e) + e
现在,我们可以消除A中的递归:
S = (0 + 10)A + 1 + e
A = (10)*(1 + e)
B = 0A + e
现在我们可以通过替换来消除A:
S = 0A + 1(0A + e)+ e = 0A + 10A + 1 + e
A = 1(0A + e)+ e = 10A + 1 + e
B = 0A + e
S = (0 + 10)(10)*(1 + e) + 1 + e
A = (10)*(1 + e)
B = 0(10)*(1 + e) + e
我们可以通过观察常见的1+e项、因子分解,然后注意到+10项不会增加任何内容,从而稍微简化S的表达式:
S = (0 + 10)(10)*(1 + e) + 1 + e
= [(0 + 10)(10)* + e](1 + e)
= (0 + e)(10)*(1 + e)
这似乎是{0,1}上既不包含00也不包含11的所有字符串的语言。为了证明这一点,我们可以显示正则表达式生成所有这样的字符串,并且它只生成这样的字符串
表达式生成的任何字符串都是三个字符串的串联:第一个字符串不能以1结尾,最后一个字符串不能以零开头,中间的字符串既不能以零开头,也不能以1结尾。因此,无法在边界处形成线00和11。很明显,这三个变量中没有一个可以包含00或11。因此,表达式生成的任何内容既没有00也没有11
可以生成任何不带00或11的字符串。假设这样的字符串以x开头,长度为n
如果n>0且x=0,表达式从第一部分中选择0,10次等于n减1,数量大于2,次;然后,它从第三部分中选择1,当且仅当n是偶数
如果n>0且x=1,表达式选择e作为第一部分,取10乘以等于n减1,数量乘以2,当且仅当n为奇数时,表达式选择1作为第三部分
如果n=0,表达式将为第一部分和第三部分选择空字符串,并花费10次零次
在这三种情况下,正则表达式都能够生成字符串。因为表达式在我们的语言中生成所有字符串,并且只生成字符串,所以它是我们描述的语言的正则表达式。这可能吗?我的意思是这里有递归。另一方面,它似乎是
1
和0
的交替序列?我不明白。顺便说一句,我看到了一个可能的解决方案:你的1(0A+0B+ε)+0ε+ε
在我看来是错误的,这似乎是因为你在0(1B+ε)+1(0A+ε)
中忘记了a
和B
,非终结符。你的正则表达式的元符号是什么?重复(0..n
)是否为*
?我想我们不会比(01)更好∗+(10)∗+(01)∗0+(10)∗1
我已经链接到了。我们看到(0+e)(10)*(1+e)
相当于(1+e)(01)*(0+e)
。在这样的情况下,是否有某种标准形式表明人们更喜欢其中一种?顺便说一句:很好的解释,我已经在寻找一个好的介绍。这是一个很好的例子,说明了理论信息学在实践中的帮助。我想知道,如果我们先解决A,然后解决B,我们是否会得到另一种形式?我们通过应用规则机械地得到了这个形式,直到我们求解S。一般来说,会有无穷多个等价表达式,其中许多表达式在运算长度方面可能是相似的。非常感谢。我试图放弃,因为我无论如何都无法解决它,但这是一个很大的帮助。@bongbong如果这个答案对你有帮助,那么接受它是正确的选择(回答者获得+15,你获得+2)