



























Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Algoritmo di Parsing Bottom up
Tipologia: Dispense
1 / 35
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!




























1. Sposta il terminale corrente dall'input alla cima della pila 2. Riduci una stringa in cima alla pila al nonterminale A , data la produzione A
Programma di Parsing
Tabella di parsing
pila output
input (sequenza di simboli)
Pila Input Azione $ stringa $
$ S’ $ accetta
Overview del parsing:
assioma della G "estesa"
Pila Input Azione 1 $ () $ sposta 2 $ ( ) $ S 3 $ (S ) $ sposta 4 $ (S) $ S 5 $ (S)S $ S ( S ) S 6 $ S $ S’ S 7 $ S’ $ accetta
Pila Input Azione 1 $ n+n $ sposta 2 $ n +n $ E n 3 $ E +n $ sposta 4 $ E+ n $ sposta 5 $ E+n $ E E + n 6 $ E $ E’ E 7 $ E’ $ accetta
(B): E’EE+nn+n
Esempio: (A): S = è sempre in cima alla pila! Riducibile solo quando pila+input = forma sentenziale precedente
Passo 3: $ (S ) $ S $ (SS ) $ non forma sentenziale!
Intuitivamente: produzione “contestualizzata”
Genericamente: A , = : A .
Intuitivamente: item = rappresentazione dello stato di riconoscimento della RHS di una produzione
Stato
E E. + n
E E + n | n
E . E + n E E. + n E E +. n E E + n. E . n E n.
caso generale: A .
casi specifici
: già analizzata in cima alla pila : da processare (presente in forma concreta in un prefisso dell'input ancora da analizzare) A . Item iniziale : si inizia a riconoscere A mediante A A . Item completo : in cima alla pila: A = candidata alla riduzione
= { simboli grammaticali } Item LR(0) = stati di un NFA che mantiene lo stato di riconoscimento di un parser bottom-up Transizioni =?
Stato iniziale? In teoria: S . , ma poiché alternative S’ . S
stati finali: compito dell'automa
terminale: spostamento di X sulla pila
nonterminale:
spostamento virtuale di X sulla pila, ma dopo una riduzione X : deve essere preceduto dal riconoscimento di
. = stato iniziale di tale riconoscimento
mantenere lo stato del parsing bottom-up non riconoscimento di stringhe!
Possibilità: X
E . E + n
E . n
n^ E n.
E
E E. + n +^ E E +. n n^ E E + n.
E . E + n E . n
E E. + n
n E n.
E E +. n n E E + n.
kernel item { stati raggiunti da transizioni non-vuote (o stato iniziale) } closure item { stati raggiunti da -chiusura }
sufficienti per identificare lo stato
riduzione/riduzione : s { A . , B . }
spostamento/riduzione : s { A . , B . a }
(
S’ . S S . ( S ) S S .
S (^) S’ S.
(
S (. S ) S S . ( S ) S S .
S ( S. ) S
S ( S ). S S . ( S ) S S .
S S ( S ) S.
(
S
E E + n | n
E’ . E E . E + n E . n
E E’^ ^ E^. E E. + n
n E n.
+ E E +. n n^ E E + n.
A ( A ) | a
(
A’ . A A . ( A ) A . a
A (^) A’ A.
(
A (. A ) A . ( A ) A . a
A a.
A A ( A. )
a
a ) A ( A ).
Pila Input Azione 1 $ 0 ((a)) $ sposta 2 $ 0 (3 (a)) $ sposta 3 $ 0 (3 (3 a)) $ sposta 4 $ 0 (3 (3 a2 )) $ A a 5 $ 0 (3 (3 A4 )) $ sposta 6 $ 0 (3 (3 A4 )5 ) $ A ( A ) 7 $ 0 (3 A4 ) $ sposta 8 $ 0 (3 A4 )5 $ A ( A ) 9 $ 0 A1 $ accetta
( ( a ) )
0 1
2
(^3 4 )
In 2 modi prima dello spostamento prima della riduzione: FOLLOW ( A ): per decidere se ridurre A
pila := $0; lookahead := primo simbolo in input; repeat s := Top(pila); /* s è uno stato / if A . X* ∊ s and Terminal( X ) and X = lookahead then Sposta lookahead sulla pila; Push(s’), where s s’ è una transizione nel DFA else if A . ∊ s and lookahead ∊ FOLLOW ( A ) then Riduci A ; if A = S’ S then Accetta /* lookahead = $ , poichè FOLLOW ( A ) = { $ } / else Rimuovi con i suoi stati dalla pila; / è in cima alla pila per costruzione / s’ := Top(stack); / B . A ∊ s’ */ Push(A); Push(s’’), where s’ s’’ è una transizione nel DFA else Errore() until acettazione o errore.
A
X
(
S’ . S S . ( S ) S S .
S (^) S’ S.
(
S (. S ) S S . ( S ) S S .
S ( S. ) S
S ( S ). S S . ( S ) S S .
S S ( S ) S.
(
S
E’ . E E . E + n E . n
E E’ E. E E. + n
n E n.
+ E E +. n n^ E E + n.
E E + n | n
LR(0)
SLR(1)
E E + n | n
E’ . E E . E + n E . n
E E’^ ^ E^. E E. + n
n E n.
+ E E +. n n^ E E + n.
1
2 3 4
0
Stato Input Goto n + $ E 0 s2 1 1 s3 accetta 2 E n E n 3 s 4 E E + n E E + n
Pila Input Azione $ 0 n+n+n $ sposta $ 0 n2 +n+n $ E n $ 0 E1 +n+n $ sposta $ 0 E1 +3 n+n $ sposta $ 0 E1 +3 n4 +n $ E E + n $ 0 E1 +n $ sposta $ 0 E1 +3 n $ sposta $ 0 E1 +3 n4 $ E E + n $ 0 E1 $ accetta
n + n + n
spostamento/riduzione scelto lo spostamento riduzione/riduzione errore nella specifica della G?
stat if-stat | other if-stat if expr then stat | if expr then stat else stat expr true | false
G ambigua deve un conflitto da qualche parte!
astrazione (rimozione di expr e then )
S I | other I if S | if S else S
FOLLOW ( S ) = FOLLOW ( I ) = { $ , else }