Изменения

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

LR(1)-разбор

159 байт добавлено, 22:05, 4 декабря 2021
м
Нормальное отображение latex
</wikitex>
====Псевдокод====
<wikitex>
Псевдокод построения множеств $closure$ и $goto$, а также множества наборов ситуаций $items$ для грамматики
$\Gamma' =\langle\Sigma, N, S, P\rangle$:
<code> '''item'''[] closure('''item'''[] $<tex>I$</tex>):
'''bool''' changed
'''item'''[] $<tex>J$ = $I$ </tex>
'''repeat'''
changed = ''false''
'''for''' $<tex>[A\rightarrow\alpha\cdot B\beta, a]\in I$</tex> '''for''' $<tex>(B\rightarrow\gamma)\in \Gamma'.P$</tex> '''for''' $<tex>b\in FIRST(\beta\alpha)$</tex> $<tex>J$</tex>.add($<tex>[B\rightarrow\cdot\gamma,b]$</tex>)
changed = ''true''
'''until not''' changed
'''return''' $<tex>J$</codetex><code> '''item'''[] goto('''item'''[] $<tex>I$</tex>, '''char''' $<tex>X$</tex>): '''item'''[] $<tex>J=\varnothing$</tex> '''for''' $<tex>[A\rightarrow\alpha\cdot X\beta, a]\in I$</tex> $<tex>J$</tex>.add($<tex>[A\rightarrow\alpha X\cdot\beta, a]$</tex>) '''return''' $<tex>closure(J)$</codetex><code> '''item'''[][] items($<tex>\Gamma'$</tex>):
'''bool''' changed
'''item'''[][] $<tex>C$</tex> $<tex>C$</tex>.add($<tex>closure(\{[S'\rightarrow\cdot S,\char36$]\})\$</tex>)
'''repeat'''
changed = ''false''
'''for''' '''item'''[] $<tex>I\subset C$</tex> '''for''' $<tex>X \in \Gamma'.\Sigma$</tex> '''if''' $<tex>goto(I,X)\neq\varnothing$ </tex> '''and''' $<tex>goto(I,X)\not\subset C$</tex> $<tex>C$</tex>.add($<tex>goto(I,X)$</tex>)
changed = ''true''
'''until not''' changed
'''return''' $C$</codetex>C</wikitextex>
====Пример====
3
правки

Навигация