69
 правок
Изменения
Нет описания правки
Для простоты добавим новый стартовый вспомогательный нетерминал <tex>S'</tex> и правило <tex>(S' \rightarrow S)</tex>.
 <font color=green> // Инициализация </font>
 D[0] = {[S' ⟶ ·<tex>\rightarrow</tex> <tex>\cdot</tex>S, 0]}
 '''for''' i = 1 '''to''' len(w) - 1
   D[i] = <tex>\varnothing </tex>
 <font color=green> // Основная часть </font>
 '''for''' j = 0 '''to''' len(w) -1
   scan(D, j)
   '''while''' D[j] изменяется
   '''if''' j = 0
     '''return'''
   '''for''' [A ⟶ &<tex>\rightarrow</tex> <tex>\alpha;·</tex><tex>\cdot</tex>a&<tex>\beta;</tex>, i] ∈ <tex>\in</tex> D[j - 1]
     '''if''' a = w[j - 1]
       D[j] ∪= {[A ⟶ &<tex>\rightarrow</tex> <tex>\alpha;</tex>a·&<tex>\cdot</tex><tex>\beta;</tex>, i]} 
 <font color=green> // Второе правило </font>
 '''function''' predict(D, j)
   '''for''' [A ⟶ &<tex>\rightarrow</tex> <tex>\alpha;·</tex><tex>\cdot</tex>B&<tex>\beta;</tex>, i] ∈ <tex>\in</tex> D[j]     '''for''' [B ⟶ <tex>\rightarrow</tex> η] ∈ <tex>\in</tex> P       D[j] ∪= {[B ⟶ ·<tex>\rightarrow</tex> <tex>\cdot</tex>η]} 
 <font color=green> // Третье правило </font>
 '''function''' complete(D, j)
   '''for''' [B ⟶ <tex>\rightarrow</tex> η·<tex>\cdot</tex>, i] ∈ <tex>\in</tex> D[j]     '''for''' [A ⟶ &<tex>\rightarrow</tex> <tex>\alpha;·</tex><tex>\cdot</tex>B&<tex>\beta;</tex>, k] ∈ <tex>\in</tex> D[i]       D[j] ∪= {[A ⟶ &<tex>\rightarrow</tex> <tex>\alpha;·</tex><tex>\cdot</tex>B&<tex>\beta;</tex>, k]}
==Корректность алгоритма==