この一般的な文法は何をしますか?
S -> LR
L -> L0Y
L -> LX
X1 -> 1X
X0 -> 0X
X0 -> 1Y
Y1 -> 0Y
YR -> R
L -> epsilon
R -> epsilon
開始記号は S です。この文法から文字列を生成しようとしたところ、すべての 2 進数が得られました。しかし、私はそれが何か特定のことをすると思います。
この一般的な文法は何をしますか?
S -> LR
L -> L0Y
L -> LX
X1 -> 1X
X0 -> 0X
X0 -> 1Y
Y1 -> 0Y
YR -> R
L -> epsilon
R -> epsilon
開始記号は S です。この文法から文字列を生成しようとしたところ、すべての 2 進数が得られました。しかし、私はそれが何か特定のことをすると思います。
S -> LR
L -> L0Y
L -> LX
X1 -> 1X
X0 -> 0X
X0 -> 1Y
Y1 -> 0Y
YR -> R
L -> epsilon
R -> epsilon
端子: 0,1 開始: S
文法を分割しましょう:
S -> LR
L -> L0Y
L -> LX
これにより、との文字列の形式L
で文字列が生成されます。X
0Y
R
X1 -> 1X
X0 -> 0X
X0 -> 1Y
Y1 -> 0Y
YR -> R
X
andY
をバイナリ文字列に作用するものとして扱います:X
は右に伝搬し、a0
を に変更し、1
後続のすべての1
s を0
s に変更します。実際には、シングルX
は、文字列の長さを変更せずに (またはスタックして)、2 進数をインクリメントします。
リーディングは、すべての s の文字列をすべての s にY
書き換えます(またはスタックします)。1
0
L
文字列の右側の可能なアクションとしてルールを扱います。L => L0Y
文字列をすべて 1 からすべて 0 にリセットし、その長さを 1 増やします。L => LX
他の数値を増やしますが、値が最大の場合は失敗します。
これら 2 つのアクションを組み合わせると、0 と 1 のすべての文字列 (空の文字列を含む) を (非効率的に) 生成するのに十分です。
L -> epsilon
R -> epsilon
センチネルのみをクリーンアップします。
4 語以内の言語の 1 つの可能な説明:
すべての文字列のセット