Для простоты добавим новый стартовый вспомогательный нетерминал <tex>S'</tex> и правило <tex>S' \rightarrow S</tex>.
<tex>I_0</tex> ∪= <tex>\lbrace [S' \rightarrow \cdot S, 0]\rbrace</tex> # Правило (0) — инициализация
useful_loop(0)
for i = 1..n
for <tex>[A \rightarrow \alpha \cdot a_{j} \beta, i] \in I_{j-1}</tex>
<tex>I_j</tex> ∪= <tex>\lbrace [A \rightarrow \alpha a_{j} \cdot \beta, i]\rbrace</tex> # Правило (1)
useful_loop(j)
for <tex>[B \rightarrow \eta \cdot , k] \in I_j</tex>
for <tex>[A \rightarrow \alpha \cdot B \beta, i] \in I_{k}</tex>
<tex>I_j</tex> ∪= <tex>\lbrace [A \rightarrow \alpha B \cdot \beta, i]\rbrace</tex> # Правило (2)
for <tex>[B \rightarrow \alpha \cdot A \eta, k] \in I_j</tex>
for <tex>\beta : (A \rightarrow \beta) \in P</tex>
<tex>I_j</tex> ∪= <tex>\lbrace [A \rightarrow \cdot \beta, j]\rbrace</tex> # Правило (3)
while на данной итерации какое-то множество изменилось