Kodujemy zawartość taśmy maszyny Turinga w formie sentymentalnej; specjalny zestaw nie-terminali koduje aktualny stan. W dowolnym momencie może być tylko jeden z nich w formie sentymentalnej, umieszczony po prawej stronie symbolu, na który obecnie wskazuje TM.
Drugim kluczowym pomysłem jest to, że musimy odwrócić ten proces: TM biorą słowo jako dane wejściowe i przekształcają je w lub , w przeciwnym razie nie zakończą się. Gramatyka musi jednak generować słowo. Na szczęście gramatyki są z natury niedeterministyczne, więc możemy po prostu pozwolić „odgadnąć”, skąd pochodzi akceptująca ; wówczas mogą zostać wygenerowane wszystkie słowa, które powodują akceptację bazy TM.0 1101
Niech zestaw stanów nieterminalnych; niech będzie początkowym stanem nieterminalnym, a zestawem stanów-przyjmujących-nieterminalnych. Po pierwsze, potrzebujemy reguł początkowych, które generują wszystkie możliwe konfiguracje akceptacji:Q 0 Q F ⊆ QQ ={ Q0, … , Qk}Q0Qfa⊆ Q
S.→ # 1 Qfa# dla wszystkich .Qfa∈ Qfa
Podobnie kończymy, gdy „osiągniemy” stan początkowy we właściwej pozycji, a mianowicie na pierwszym symbolu:
# a Q0→ # a dla wszystkich .a ∈ Σ
Tłumaczenie rzeczywistych przejść stanu jest proste:
Qa Q ba b Q→ c Q′ dla a , c ∈ Σ ∧ ( a , Q , N) ∈ δ( c , Q′)→ a c Q′ dla a , b , c ∈ Σ ∧ ( b , Q , L ) ∈ δ( c , Q′)→ c Q′b dla a , b , c ∈ Σ ∧ ( a , Q , R ) ∈ δ( c , Q′)
Jest kilka technicznych problemów, które można rozwiązać; na przykład musisz pozbyć się znaczników granic na końcu. Można to zrobić, spawnując dwa specjalne nieterminale zamiast kończąc, zamieniając je na końce, a następnie usuwając wraz z nimi. Ponadto na żądanie trzeba utworzyć więcej ; wymaga to hakowania reguł za pomocą .###re= #
Ponadto konstrukcja staje się nieco bardziej skomplikowana, jeśli TM używa symboli niewprowadzanych. W takim przypadku reguły zakończenia mogą być niepoprawne: jeśli gdzieś na taśmie znajdują się symbole niewprowadzane, nie wygenerowaliśmy właściwego słowa. Można to naprawić podobnie do usuwania : spawn specjalnego -0 z terminalu, który jest zamieniany w prawo i usuwany tylko wtedy, gdy wszystkie symbole pochodzą z .#Q0Σ