{a ^ ib ^ jの文脈自由文法| i、j≥0; i≠2j}


7

誰かがこれを助けることができます:

L={aibji,j0 and i2j}

この言語の文法を書こうとしているのですか?これを行う方法がわかりません。私はこれを試しました:
SaaAbaAAaAa


5
言語を分割することでタスクを簡略化できます:L={aibji<2j}{aibji>2j}
Mike B.

3
その理由は、CFGは組合の下で閉鎖されているということです。
Paresh 2013

1
基本的に、質問はすでにここで回答されています:言語の文脈自由文法
Hendrik Jan

回答:


7

二つの言語考えてみましょう:
L1={aibji,j0 and i>2j}
L2={aibji,j0 and i<2j}

ことを納得してください。L=L1L2

、多数のである以上よりのダブルそう1少なくともがなければならない、S ' (全く存在しない場合さん)。また、追加するたびに、少なくとも2つの追加する必要があります。ように生成できます。L1ababbaL1

S1aAAaaAbaAε

L2はもう少しトリッキーです。数のは、以下の二重よりも数である s 'は、これが存在することができるさんが、非ゼロのさん。の「基本ケース」を考えます。文字列はまたはいずれかです。最初のルールでこの基本ケースを生成します。その後、予告のすべての追加のためにすることを、我々は数増やすことができますでのがせいぜい。我々は、追加することができますので、、、またはのすべての追加のためのをab0 ab1 bbabba 2012 ab。2番目のルールでこれを処理します。したがって、のCFGはなります。L2

S2BbaBbBBbaBbaaBbε

CFGは結合の下で閉じていることに注意してください。つまり、2つのCFGの結合もCFGです。だから、のためのCFGを取得するために、開始状態ましょうのの起動状態のいずれかに鉛、またはの:LSLL1L2

SS1S2

残りのルールは2つの言語と同じです。より単純な文法があるかもしれませんが、これが最初に頭に浮かんだのです。


0

文法から始め: 次にハックしてより多くものが存在するようにし: より多くのを強制する変更は似ており、あなたに任されています。非ターミナルと3つのプロダクションを追加します。{aib2i:i0}

SaSbbϵ
abb
SaSbbAAaAa
b

3
これは、すべての文字列を生成しませんさんや、すべてのの一部での、。abL
Paresh 2013

質問をi、j≥1とi≠jとi <2jに変更すると、どのように解決策を考えることができますか?
user6885

@ Paresh、extraの一部 bsは完了するまで残ります。そして、すべてasは SAak
フォンブランド、2013

ああ...どうして見逃したのかわからない。ごめんなさい!
Paresh

@Vonbrand私が知らない問題は、それがaより多くならないように、追加のbsoを実行することです。
user6885 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.