回答:
実際、特定の位置に追加の情報を追加できる簡単なトリックがあります。その位置に隣接する文字を置き換えて、情報と元の文字でマークを付けるだけです。
あなたの例では、中央に非終端がありますが、削除できないため、通常の文字として数えられます。したがって、置き換えられた文字を示すために、 2つのコピーM aとM bがあります。派生の最後に、マーカーは、M a → aのような単純なプロダクションによって、文字の内容で置き換える必要があります。
ほとんどの場合、適用は、導出プロセスの最後に実行する必要があります。一部の構造では、これを「タイミングを合わせる」必要はありません。Mがすぐに消えると、派生は適切な位置を見つけることができず、プロセスは正常に停止しません。他の場合では、一種の制御が必要です。これは、文字に沿って移動する信号として非端末を導入することによって行われる場合があります。繰り返しますが、この信号は端子も備えている必要があります。そうでないと、同じ問題が発生します。
周りの情報を移動する、いわゆるに簡単で単調文法(で| α | ≤ β |)のような規則使用してX A → A Xとして見ることができ、Xのを飛び越えAを。:適切な文脈依存文法1つのニーズのための3つのステップでこれを分割するX A → X A X、X A X → A A X、A A X → A X。各プロダクションでは、適切なコンテキストで1文字が変更されます。このプロセスが派生の他の部分と相互作用しないことを確認するには、かなりの想像力が必要です。たとえば、最後のステップのが最初に別の導出ステップに関与するとどうなりますか?
ポジションよりも多くの情報がある場合、これは非常に短い単語では機能しない可能性があります。これに対する最も簡単な解決策は、構成内の短い文字列を無視して、個別に生成することです。
短いデフォルトの答え:言語を受け入れるLBAを考え出して、状況依存の文法とLBAが同じ言語のセットを定義していることを証明するために使用されるシミュレーションを使用します。しかし、もちろんそれはあなたが求めているものではありません。
この特定のケースでは、右線形文法を2回使用することを考えてください。1つは左用で、もう1つは右半分用です。両方の文法が「同期」して派生していることを確認する必要があるすべて。
これは、制御トークンを交換することで実行できます。つまり、左の文法はルールを選択し、フィッティングコントロールトークンを生成して、右の文法に渡します。正しい文法は制御トークンを見て、適合ルールを実行します。この方法で双方向通信を実装することもできますが、ここでは必要ありません。
これを達成する1つの方法は、LBAに関する特定の証明と同じトリックを使用することです。最初に必要になるすべての非端末を生成します。つまり、「テープ」を準備します。その後、そのテープを「移動」します。「最後に」のみ、すべての非端末を端末に置き換えます。
左側のシンボルの。これは状況依存文法では許可されていません。幸い、次ルールシミュレートできます