1

左分配法則により、この正規表現は次のようになります。A(B + C)

次のように書くことができます:AB + AC

次は私の質問です。この例では、左分配法則を使用できますか:A(B + C *)

私が得ることができるように:AB + A(C *)

または、次のようなものがありますか:AB + AC *

ありがとう

4

3 に答える 3

5

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..が続きます。ABAACACCACCC
  • AB + A(C*)ABいずれかに一致するか、その後に任意のA数のセグメントC、、、、、..が続きます。ABAACACCACCC

そして、それらはまったく同じものです。

于 2012-05-03T10:07:43.173 に答える
1

私の知る限り、はとA(B+C*)同じではありませんAB + A(C*)。最初の式はABBBBBBBBBBBBBまたはABBBBBBBBBBBBCのような文字列と一致します2番目の式はABBBBBBBBBBBBAまたはABBBBBBBBBBBACCCCCCCCCCCのような文字列と一致します

于 2012-05-03T09:52:33.073 に答える
0

AB + A(C *)これは正しいので

C *は0以上を意味します(uには0またはCの倍数があります)C +は1以上を意味します(少なくとも1つのcまたは複数)

于 2012-05-03T09:35:16.187 に答える