262
правки
Изменения
Нет описания правки
=== Построение множеств LR(1)-ситуаций ===
<wikitex>
Метод построения похож на метод для $LR(0)$-разбора, с двумя изменёнными функциями: $closure(I)$ {{---}} замыкание множества пунктовситуаций, и $goto(X,I)$ {{---}} функция переходов в автомате по символу $X$.
{{Лемма
|id=lemmaclosure
<tex>\mathtt{fillArray}(ACTION,</tex>"ошибка"<tex> ):</tex>
'''foreach''' <tex>I_i \in (E(G))\</tex>
'''if''' <tex>[A\rightarrow \alpha\cdot a\beta, b] \in I_i</tex> <font color=green>здесь <tex>a</tex> {{- --}} терминал</font>
<tex>ACTION[i,a] = </tex> "перенос <tex>j</tex>"
'''if''' <tex>[A\rightarrow \alpha\cdot, a] \in I_i</tex> && <tex>A\neq S'</tex>
'''if''' <tex>goto(I_i,A) = I_j</tex>
<tex>goto[i,A]\leftarrow j</tex>
Если в процессе построения обнаружатся конфликтующие действия {{- --}} это значит, что грамматика не принадлежит классу LR(1)
Таблица, построенная в результате применения алгоритм называется ''канонической таблицей'' LR(1)-анализа.