入力文字列が特定の言語仕様に対して有効かどうかをチェックする関数を作成する必要があります。これは標準のCFG->チョムスキー標準形、次にCYK解析になると思いましたが、言語の規則の1つは、これが起こらないようにすることです。
いくつかのルールは単純です。端末を定義する{a,b,c,d,e,f,P,Q,R,S}
と、有効な文字列は次のようになります。
1)分離された小文字の端子のいずれか
2)'x'が有効な文字列である場合、Sxも有効です。
しかし、3番目のルールは
3)XとYが有効な入力文字列である場合、PXY、QXY、RXYも有効です。
ここで{P,Q,R}
、は残りの大文字の終端記号であり、XとYは非終端記号です。
このための制作ルールはどのようになりますか?こんな感じになると思いました
XY -> PXY (and QXY, RXY)
しかし、これには2つの問題があります。1つ目は、これはCFG規則ではないということです。つまり、この言語は代わりにCSGを定義するということですか?
そして2つ目は、これが機能しないことです。
XY-> PXY-> PPXY
すべての場合に有効なメッセージではありません。