LR Parser II Parte

Click here to load reader

  • date post

    11-Jan-2016
  • Category

    Documents

  • view

    22
  • download

    0

Embed Size (px)

description

LR Parser II Parte. Giuseppe Morelli. Parser LR(1). Con il metodo SLR la tabella indica di effettuare una riduzione attraverso una produzione A-> α , se accade che per un certo item I i : [A-> α. Є Ii] Per ogni a Є FOLLOW(A) - PowerPoint PPT Presentation

Transcript of LR Parser II Parte

  • LR ParserII ParteGiuseppe Morelli

  • Parser LR(1)Con il metodo SLR la tabella indica di effettuare una riduzione attraverso una produzione A-> , se accade che per un certo item Ii :[A->. Ii]Per ogni a FOLLOW(A)In certi casi pu succedere che se il contenuto dello stack, A non pu essere prefisso di una forma sentenziale destra e pur essendo a FOLLOW(A) la riduzione A-> non si pu applicare

  • In I2 esiste un conflitto Shift- ReduceOvvero non esiste una forma sentenziale destra che inizia per R

  • E possibile mantenere informazioni riguardanti i caratteri che possono essere presenti dopo una variabile in un dato contesto.Data una produzione A->, lidea di includere negli items di uno stato i simboli terminali che possono seguire un handle per cui possibile una riduzione ad A.La forma generale di un item, LR(1) diventa [A->.,a ]Il significato di a in [A->.,a ] : viene applicata la riduzione A-> solo se il simbolo di lookahead a.

  • Insieme di item LR(1)Il metodo essenzialmente lo stesso usato per la costruzione della collezione canonica LR(0)Ovvero:Si costruisce la grammatica aumentata GSi definiscono e applicano le operazioni di CHIUSURAGOTOLa discriminante proprio la definizione delle due procedure.

  • Es.

  • Costruzione della tabella LR(1)Data G si costruisce la grammatica aumentata G quindi:Si costruisce la collezione di insiemi di Items LR(1) C = {I0, I1, . ,In} per GLo stato i costruito da Ii. Lazione per lo stato i determinata come segue:Se [A-> .a,b] in Ii e GOTO(Ii,a) = Ij allora ACTION[i,a] = shift j . a deve essere un terminaleSe [A-> ., a] in Ii (AS ) allora ACTION[i,a] = reduce A-> . Se [S -> S.,$] in Ii allora ACTION[i, $] = acceptGOTO deve essere costruita per tutti i non terminali Secondo la regola se GOTO(Ii,A)=Ij allora GOTO(i,A) = jErrore se vi sono entry non definite da 2 e 3Lo stato iniziale quello ottenuto dallinsieme di Item contenente [S->.S, $]

  • Parser LALR caratterizzato dal fatto che la tabella di parsing ottenuta per una data grammatica considerabilmente pi piccola della corrispondente LR.Lidea di base di questo metodo quella di costruire la tabella di parsing a partire dagli insieme di items LR(1) ed apportando delle semplificazioni.Lalgoritmo si costruzione si rif ad alcune definizioni e strategie gi viste (kernel items, closure etc..)

  • In generale la tecnica prevede di fare il merge in un unico insieme gli insiemi di item LR(1) che hanno lo stesso core(primo item dellinsieme).Lunione si ripercuote anche sugli insiemi GOTO(I,X) degli item I coinvolti nella fusione; poich GOTO(I,X) dipende dal core di I si pu fare il merge anche delle funzioni GOTO degli stati merged.Poich in una grammatica LR(1) non sono presenti errori di parsing si pu dimostrare che anche nellinsieme di stati ottenuti attraverso fusione non sono presenti errori

  • Tabella di parsing LALRData G si costruisce la grammatica aumentata G quindi:Si costruisce la collezione di insiemi di Items LR(1) C = {I0, I1, . ,In} per GTrovare per ogni core di item in C, gli item con lo stesso core e rimpiazzarli con la loro unione.Sia C = = {J0, J1, . ,Jn} linsieme di items risultante. La funzione ACTIONE delle tabelle di parsing dello stato i costruita attraverso Ji come fatto per la tabella LR(1).La funzione GOTO deve essere costruita considerando che se J = I1 U I2 U U Im allora i cores di di GOTO(Ii,X) sono gli stessi dei corrispondenti Ii (i=1...m); sia K lunione di GOTO(Ii,X) aventi lo stesso core allora GOTO(J,X)=K

  • La tabella derivante dallalgoritmo prima visto chiamata LALR parsing table e se non esistono confilitti nella fase di parsing la grammatica restitutia detta LALRLinsieme di Item derivanti dalla fusione e dalla nuova definzione della funzione GOTO detto LALR.La costruzione della tabella di parsing LALR implica la costruzione dellintera collezione LR(1) che pu richiedere troppo spazio e tempo per essere utilizzata nella pratica.Servono degli espedienti per migliorare allora il processo di costruzione

  • Costruzione efficiente Anzich considerare tutti gli insieme di Item si considerano quelli kernel ([S->.S,$] e con il . non allinizio del corpo della produzione); si potrebbero considerare anche gli item LR(0) senza cio il carattere di lookahead.Si costruiscono gli item LALR(1) kernel attraverso un processo di propagazione e generazione spontanea di caratteri di lookahead (see later)Da LALR(1) kernel si genera la tabella di parsing applicando loperazione di chiusura (CLOUSURE) e applicando lalgoritmo adottato per la costruzione della tabella LR(1) (def. ACTION e GOTO)

  • Determinazione dei caratteri lookahead