语言和正则表达式的制定
Formulation of language and regular expressions
我搞不懂什么是正式语言和正则表达式
这个自动机的数量:
DFA 自动机
我知道 'b' 或 'a' 的实例必须是偶数。
一开始我以为语言是:
L = {(a^i)(b^j) | i(mod2) = j(mod2) = 0, i,j>=0}
但是自动机可以从'b'开始,所以语言不正确。
另外,我发现的正则表达式也不匹配 ((aa)* + (bb)) -
例如无法获得 abab。
我通过逐步删除节点(顺序:3,1,2,0)得到的正则表达式是:
(aa|bb|(ab|ba)(bb|aa)*(ab|ba))*
据我所知,这是最简单的方法。 (我很想知道是否有人有更简单的还原——实际上我这周正在测试这个东西!)
分步过程
我们首先添加一个新的开始和接受状态。每个旧的接受状态(在这种情况下,只有一个)通过 ε 转换链接到新的接受状态:
接下来,我们删除状态 3。我们需要保留所有 运行 通过状态 3 的路径。在这种情况下,我们添加了一条从状态 0 回到自身的路径,即从状态 0 到状态 2,状态 2 回到自身:
我们对状态 1 做同样的事情:
我们可以稍微简化一下:我们将用逗号连接环回转换。 (最后,这将变成联合运算符(|
或 ⋃
等,具体取决于您的表示法。)
接下来我们将删除状态 2,并将所有内容压缩到一个大循环中:
循环变成星星;我们删除了最后一个状态,所以我们只有一个从开始状态到结束状态的转换,与一个大的正则表达式相关联:
这就是我们的正则表达式!
语言定义
您已经非常接近语言定义了。如果你可以允许一些更宽松的东西,那就是:
L = { w | w contains an even number of 'a's and 'b's }
您定义的问题是您每次都以 a
开始字符串 w
,而唯一的限制是 a
的奇偶性和 b
的。
我搞不懂什么是正式语言和正则表达式 这个自动机的数量:
DFA 自动机
我知道 'b' 或 'a' 的实例必须是偶数。 一开始我以为语言是:
L = {(a^i)(b^j) | i(mod2) = j(mod2) = 0, i,j>=0}
但是自动机可以从'b'开始,所以语言不正确。 另外,我发现的正则表达式也不匹配 ((aa)* + (bb)) -
例如无法获得 abab。
我通过逐步删除节点(顺序:3,1,2,0)得到的正则表达式是:
(aa|bb|(ab|ba)(bb|aa)*(ab|ba))*
据我所知,这是最简单的方法。 (我很想知道是否有人有更简单的还原——实际上我这周正在测试这个东西!)
分步过程
我们首先添加一个新的开始和接受状态。每个旧的接受状态(在这种情况下,只有一个)通过 ε 转换链接到新的接受状态:
接下来,我们删除状态 3。我们需要保留所有 运行 通过状态 3 的路径。在这种情况下,我们添加了一条从状态 0 回到自身的路径,即从状态 0 到状态 2,状态 2 回到自身:
我们对状态 1 做同样的事情:
我们可以稍微简化一下:我们将用逗号连接环回转换。 (最后,这将变成联合运算符(|
或 ⋃
等,具体取决于您的表示法。)
接下来我们将删除状态 2,并将所有内容压缩到一个大循环中:
循环变成星星;我们删除了最后一个状态,所以我们只有一个从开始状态到结束状态的转换,与一个大的正则表达式相关联:
这就是我们的正则表达式!
语言定义
您已经非常接近语言定义了。如果你可以允许一些更宽松的东西,那就是:
L = { w | w contains an even number of 'a's and 'b's }
您定义的问题是您每次都以 a
开始字符串 w
,而唯一的限制是 a
的奇偶性和 b
的。