De fato, existe um truque simples que permite adicionar informações extras em uma determinada posição: basta substituir uma letra adjacente à posição e marcar com a informação e a letra original.
No seu exemplo, tenha um não-terminal para o meio, mas como não pode ser excluído, também conta como uma letra normal. Assim, temos duas cópias M a e M b para indicar as letras substituídas. No final da derivação, os marcadores devem ser substituídos pelo conteúdo das letras, por produções simples como M a → a .MMumaMbMuma→ a
Na maioria dos casos, a aplicação de precisa ser realizada no final do processo de derivação. Em algumas construções, isso não precisa ser "cronometrado": quando o M desaparece muito cedo, a derivação não consegue encontrar uma posição adequada e o processo não para com sucesso. Em outros casos, é preciso um tipo de controle. Às vezes, isso é feito através da introdução de um termo não terminal como um sinal que se move ao longo das letras. Novamente, esse sinal também deve transportar um terminal, caso contrário você acaba com os mesmos problemas.Muma→ aM
Movendo informações ao redor é fácil nas chamadas gramáticas monotónicos ( com | alfa | ≤ beta | ) usando regras como X A → A X , que pode ser visto como X salto sobre A . Para gramáticas sensíveis ao contexto, é necessário dividir isso em três etapas: X A → X A X , X A X → A A X , A A X → A Xα → β| α | ≤β|XA → A XXUMAXA → XUMAX, XUMAX→ A AX, A AX→ A X. em cada produção, uma letra é alterada no contexto apropriado. É preciso muita imaginação para ver esse processo não interagir com outras partes da derivação. Por exemplo, o que acontece quando o na última etapa é envolvido pela primeira vez em outra etapa de derivação?UMA
Isso pode não funcionar para palavras muito curtas, quando há mais informações do que posições disponíveis. A solução mais simples para isso é ignorar seqüências curtas em sua construção e gerá-las separadamente.