誰かがこれを助けることができます:
この言語の文法を書こうとしているのですか?これを行う方法がわかりません。私はこれを試しました:
誰かがこれを助けることができます:
この言語の文法を書こうとしているのですか?これを行う方法がわかりません。私はこれを試しました:
回答:
二つの言語考えてみましょう:
ことを納得してください。
、多数のである以上よりのダブルそう1少なくともがなければならない、S ' (全く存在しない場合さん)。また、追加するたびに、少なくとも2つの追加する必要があります。ように生成できます。
はもう少しトリッキーです。数のは、以下の二重よりも数である s 'は、これが存在することができるさんが、非ゼロのさん。の「基本ケース」を考えます。文字列はまたはいずれかです。最初のルールでこの基本ケースを生成します。その後、予告のすべての追加のためにすることを、我々は数増やすことができますでのがせいぜい。我々は、追加することができますので、、、またはのすべての追加のためのを 。2番目のルールでこれを処理します。したがって、のCFGはなります。
CFGは結合の下で閉じていることに注意してください。つまり、2つのCFGの結合もCFGです。だから、のためのCFGを取得するために、開始状態ましょうのの起動状態のいずれかに鉛、またはの:
残りのルールは2つの言語と同じです。より単純な文法があるかもしれませんが、これが最初に頭に浮かんだのです。
文法から始め: 次にハックしてより多くものが存在するようにし: より多くのを強制する変更は似ており、あなたに任されています。非ターミナルと3つのプロダクションを追加します。