左分配法則により、この正規表現は次のようになります。A(B + C)
次のように書くことができます:AB + AC
次は私の質問です。この例では、左分配法則を使用できますか:A(B + C *)
私が得ることができるように:AB + A(C *)
または、次のようなものがありますか:AB + AC *
ありがとう
左分配法則により、この正規表現は次のようになります。A(B + C)
次のように書くことができます:AB + AC
次は私の質問です。この例では、左分配法則を使用できますか:A(B + C *)
私が得ることができるように:AB + A(C *)
または、次のようなものがありますか:AB + AC *
ありがとう
AB + A(C*)
間違いなく正しいです(そしてAB + AC*
、の優先順位によっては、ほぼ確実に正しいです*
)。
問題の正規表現はA ( B + C* )
⇔A ( B + (C*) )
です。c
=を置換として使用するC*
と、元の正規表現をとして記述A ( B + c )
できます。これで、左分配法則を使用できることは明らかです。すべての手順を一度に実行します。
A ( B + C* ) <=> A ( B + (C*) ) <=> AB + A(C*) <=> AB + AC*
(ここでは、教訓的な目的のために、必要以上の作業があります。私は<=>
「と同等」を意味するために使用しています。)
問題の正規表現が一致するものを確認することもできます(これは証明ではありませんが、同等であることを示す良いデモンストレーションです)。
A(B + C*)
一致の後に、A
単一B
または任意の数のセグメント、、、、、C
..が続きます。AB
A
AC
ACC
ACCC
AB + A(C*)
AB
いずれかに一致するか、その後に任意のA
数のセグメントC
、、、、、..が続きます。AB
A
AC
ACC
ACCC
そして、それらはまったく同じものです。
私の知る限り、はとA(B+C*)
同じではありませんAB + A(C*)
。最初の式はABBBBBBBBBBBBBまたはABBBBBBBBBBBBCのような文字列と一致します2番目の式はABBBBBBBBBBBBAまたはABBBBBBBBBBBACCCCCCCCCCCのような文字列と一致します
AB + A(C *)これは正しいので
C *は0以上を意味します(uには0またはCの倍数があります)C +は1以上を意味します(少なくとも1つのcまたは複数)