In effetti, esiste un semplice trucco che consente di aggiungere ulteriori informazioni in una determinata posizione: basta sostituire una lettera adiacente alla posizione e contrassegnarla con le informazioni e la lettera originale.
Nel tuo esempio, usa una non intermedia per il centro, ma poiché non può essere eliminata, conta anche come una normale lettera. Quindi abbiamo due copie M a e M b per indicare le lettere sostituite. Alla fine della derivazione i marcatori dovrebbero essere sostituiti dal loro contenuto in lettere, da semplici produzioni come M a → a .MMun'MBMun'→ a
Nella maggior parte dei casi, l'applicazione di deve essere eseguita al termine del processo di derivazione. In alcune costruzioni questo non deve essere "cronometrato": quando la M scompare troppo presto, la derivazione non riesce a trovare una posizione corretta e il processo non si fermerà con successo. In altri casi è necessario un tipo di controllo. Questo a volte viene fatto introducendo un non terminale come segnale che si sposta lungo le lettere. Ancora una volta, questo segnale dovrebbe contenere anche un terminale, altrimenti si verificano gli stessi problemi.Mun'→ aM
Muoversi informazioni intorno è facile nelle cosiddette grammatiche monotone ( di | alfa | ≤ ß | ) utilizzando le regole come X A → A X , che può essere visto come X che salta sopra A . Per una corretta grammatica sensibile al contesto, è necessario dividerlo in tre passaggi: X A → X A X , X A X → A A X , A A X → A Xα → β| α | ≤β|XA → A XXUNXA → XUNX, XUNX→ A AX, A AX→ A X. in ogni produzione una lettera viene cambiata in un contesto appropriato. Ci vuole un po 'di immaginazione per vedere che questo processo non interagisce con altre parti della derivazione. Ad esempio, cosa succede quando la nell'ultimo passaggio viene coinvolta per la prima volta in un altro passaggio di derivazione?UN
Questo potrebbe non funzionare per parole molto brevi, quando sono disponibili più informazioni rispetto alle posizioni disponibili. La soluzione più semplice è ignorare stringhe brevi nella tua costruzione e generarle separatamente.