Изменения

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

LR(1)-разбор

355 байт добавлено, 18:21, 24 июня 2015
Построение множеств LR(1)-пунктов
Значит, $b\in FIRST(\beta a)$.
}}
====Псевдокод====
Псевдокод построения множеств $CLOSURE$ и $GOTO$, а также множества пунктов $items$:
<code>
'''function''' constructFOLLOWSet<Item> CLOSURE(Set<Item> I): '''forbool''' <tex>( A \in N )</tex> <tex>\mathrm{FOLLOW}[A] = \varnothing </tex>changed; Set<texItem>\mathrm{FOLLOW}[S] $J$= \{\$\} </tex> <font color=green> // в стартовый терминал помещается символ конца строки </font> changed = ''true''I$; '''whilerepeat''' changed changed = '''false'''; '''for''' <tex>( $[A \to rightarrow\alpha \cdot B\beta, a]\in P )</tex>I$ '''for''' <tex>$( B : \alpha = rightarrow\gamma)\in G'$ '''for''' $b\in FIRST(\beta \alpha)$ J.add($[B \rightarrow\cdot\gamma,b]$); changed = '''true''' '''until''' !changed; '''return''' J;</texcode><code> Set<Item> GOTO(Set<Item>I, X): Set<texItem> $J$=$\mathrm{FOLLOW}varnothing$; '''for''' $[B]A\rightarrow\ alpha\cup =cdot X\ beta, a]\mathrm{FIRST}in I$ J.add($[A\gamma) rightarrow\setminus alpha X\{cdot\varepsilon\} beta, a]$); '''return''' $CLOSURE(J)$;</texcode><code> Set<Set<Item>>items($G'$): '''ifbool''' changed; Set<texSet<Item>> $C$ = $CLOSURE({S'\varepsilon rightarrow\in cdot S,\mathrm{FIRSTchar36}(\gamma) $; '''repeat''' changed = '''false'''; '''for''' Set</texItem>$I\subset C$ <tex> '''for''' $X \mathrm{FOLLOW}[B]in terminals(G')$ '''if''' $GOTO(I,X)\ neq\cup =varnothing$ and $GOTO(I,X)\ not\mathrm{FOLLOW}[A]</tex>subset C$ C.add($GOTO(I,X)$); changed = '''true'' ' '''until''' !changed; '''ifreturn''' <tex> \mathrm{FOLLOW}[B] </tex> изменилсяC;
</code>
</wikitex>
262
правки

Навигация