次の言語の文脈自由文法を見つける必要があります。
L= { w from { a,b,c,d }* : #a+2#b=2#c+#d }
これが私の試みですが、それが正しいとは思えません:
S -> aSd|dSa|BSC|CSB|abSdc|baScd|dcSab|cdSba|SS|λ
B -> c|dd
C -> b|aa
次の言語の文脈自由文法を見つける必要があります。
L= { w from { a,b,c,d }* : #a+2#b=2#c+#d }
これが私の試みですが、それが正しいとは思えません:
S -> aSd|dSa|BSC|CSB|abSdc|baScd|dcSab|cdSba|SS|λ
B -> c|dd
C -> b|aa
次のように、言語を認識する PDA を作成できます。
a
とb
は、スタックに対応しa
ます。c
とはスタック上でd
対応しc
ます。a
でありa
、入力にある場合は、それを消費してスタックにプッシュa
します。a
でありb
、入力にある場合は、それを消費してスタックにプッシュaa
します。c
でありc
、入力にある場合は、それを消費してスタックにプッシュcc
します。c
でありd
、入力にある場合は、それを消費してスタックにプッシュc
します。c
、a
を消費a
してポップしc
ます。c
、b
を消費b
してポップし、スタックが空の場合は別のものをポップするか、 をプッシュするc
特別な状態に移動します。c
a
つまり、CFG を構築できる必要があります。あなたは正しい方向に進んでいると思いますが、順序の制約がないため、この CFG を書くのは大変です。これは、同じ基本ルールの順列がたくさんあることを意味します。