Ми кодуємо вміст стрічки машини Тьюрінга в сентенційних формах; спеціальний набір нетерміналів кодує поточний стан. У будь-який момент часу може бути лише один із них у сентенційній формі, розміщений праворуч від символу, на який вказує ТМ.
Друга найважливіша ідея полягає в тому, що ми повинні змінити процес: ТМ приймають слово як вхідне і перетворюють його на або , або вони не закінчуються. Граматика, однак, повинна породжувати слово. На щастя, граматики за своєю суттю не є детермінованими, тому ми можемо просто дозволити "здогадуватися", звідки прийшов приймаючий ; всі слова, які викликають прийняття ТМ, можуть бути створені потім.101
Нехай набір державних нетерміналів; wlog нехай є початковим станом-нетермінальним і набором приймаючих станів-нетерміналів. По-перше, нам потрібні правила запуску, які генерують усі можливі приймаючі конфігурації:Q={Q0,…,Qk}Q0QF⊆Q
S→#1Qf# для всіх .Qf∈QF
Аналогічно, ми закінчуємо, коли «дістаємо» вихідний стан у правильному положенні, а саме на першому символі:
#aQ0→#a для всіх .a∈Σ
Переклад фактичних переходів стану є прямим:
aQaQbabQ→cQ′ for a,c∈Σ∧(a,Q,N)∈δ(c,Q′)→acQ′ for a,b,c∈Σ∧(b,Q,L)∈δ(c,Q′)→cQ′b for a,b,c∈Σ∧(a,Q,R)∈δ(c,Q′)
Існують деякі технічні перегини, щоб випрасувати; наприклад, ви повинні позбутися граничних маркерів наприкінці. Це можна зробити, зробивши нерестові два спеціальні нетермінали замість завершення, помінявши їх до кінців, а потім видалити разом з ними. Крім того, більше потрібно створити на вимогу; що вимагає певного злому правил із .###d=#
Також конструкція стає дещо складнішою, якщо TM використовує символи, що не вводяться. У цьому випадку правила припинення можуть бути помилковими: якщо десь на стрічці є символи, що не вводяться, ми не створили належного слова. Це можна виправити аналогічно видаленню : породжує спеціальний нетермінал із який праворуч і видаляється лише у тому випадку, якщо всі символи з .#Q0Σ