Изменения

Перейти к: навигация, поиск

LR(1)-разбор

31 байт убрано, 13:40, 20 сентября 2015
Нет описания правки
Добавим в ситуацию второй компонент: терминальный символ. Таким образом, LR(1)-ситуации будут выглядеть следующим образом:
$[A\rightarrow\alpha\cdot\beta, a]$, где первая часть {{---}} продукция, а вторая {{---}} терминал или маркер конца входной строки $\char36$. Здесь $a$ называется '''предпросмотром''' (англ. ''lookahead'') ситуации, а число $1 $ в LR(1) означает его длину.Теперь мы будем выполнять свёртку в соответствии с продукцией $A\rightarrow\alpha$, только в том случае, если находимся в ситуации $[A\rightarrow\alpha\cdot\beta, a]$ , и $a$ {{---}} входной символ.
{{Определение
|id=defValid
Item[] J = I
'''repeat'''
changed = '''false'''
'''for''' $[A\rightarrow\alpha\cdot B\beta, a]\in I$
'''for''' $(B\rightarrow\gamma)\in G'$
'''for''' $b\in FIRST(\beta\alpha)$
J.add($[B\rightarrow\cdot\gamma,b]$)
changed = '''true'''
'''until''' not changed
'''return''' J
Item[][] $C = \{closure({S'\rightarrow\cdot S,\char36})\}$
'''repeat'''
changed = '''false'''
'''for''' Item[] $I\subset C$
'''for''' $X \in symbols(G')$ <font color="green">//по всем символам грамматики</font>
'''if''' $goto(I,X)\neq\varnothing$ and $goto(I,X)\not\subset C$
C.add($goto(I,X)$)
changed = '''true'''
'''until''' not changed
'''return''' C
262
правки

Навигация