Analisi di turni-risoluzione - domande


10

Di recente mi sono imbattuto in un documento che descrive la tecnica di analisi menzionata nel titolo. Sfortunatamente, la terminologia usata in questo documento va oltre la mia comprensione, quindi ho cercato di afferrare l'algoritmo di costruzione in modo più intuitivo. Credo di esserci riuscito ( questa presentazione è stata la fonte del momento ah-ah), ma una verifica della correttezza da parte di qualcuno che abbia familiarità con la tecnica o la terminologia in essa contenuta sarebbe molto apprezzata.

Descriverò la mia opinione sulla soluzione (se è corretta, credo che potrebbe essere di aiuto ad altre persone che tentano di comprendere la tecnica) e successivamente porterò ulteriori domande. Per garantire non c'è equivoco, ho intenzione di utilizzare la seguente notazione standard: , A , B , C , . . . N , . . . X , Y , Z N T , α , βun',B,c,...TUN,B,C,...N...X,Y,ZNT e, come nel documento, A i ω per indicare il numero della regola i . Tuttavia, probabilmente userò nomi diversi per concetti rispetto al documento originale.α,β,γ,...{NT}*UNioωio

Inoltre, in tutta la descrizione, viene utilizzata la relazione di equivalenza .κ0

Costruzione

Esistono due tipi di elementi all'interno dell'automa di analisi: elementi LR semplici (0) del modulo che chiamo elementi shift e elementi del modulo A i α β , m , n che chiamo risolve articoli ; questi dicono al parser di respingere n simboli indietro nel flusso di input e quindi ridurre di numero regola m sul primo simbolo di β .UNioαβUNioαβ,m,nnmβ

La grammatica viene aumentata con la regola e la costruzione inizia con l'elemento di spostamento S 0S $ nello stato iniziale.S'0S$S'0S$

Ora, per costruire l'automa, decidere tra queste alternative per ogni elemento in uno stato :q

  1. Se l'elemento è un elemento a turni , ci sarà una transizione q X q nell'automa, dove X è il primo simbolo di β .UNioαβqXq'Xβ

  2. Se l'oggetto è un articolo a turni finito , aggiungi un articolo di risoluzione B j α A β , i , 0 per ogni regola B j α A β .UNioωBjαUNβ,io,0BjαUNβ

  3. Se l'elemento è un articolo di risoluzione , lascia che X sia il primo simbolo di β . Se X N , aggiungi un elemento di spostamento X jω per ogni regola X j ω . Se altri elementi diversi da A i α β , m , n hanno X come punto di riferimento del punto, aggiungi una transizione q X q UNioαβ,m,nXβXNXjωXjωUNioαβ,m,nXqXq'all'automa. Ogni elemento di risoluzione in q si tradurrà in un elemento di risoluzione C i α X β , m , n + 1 in q .CioαXβ,m,nqCioαXβ,m,n+1q'

  4. Se l'elemento è un elemento di risoluzione non fornirà alcuna informazione di lookahead e può essere scartato, ma prima aggiungi un elemento di risoluzione B j α A β , m , n per ogni regola B j α A β .UNioω,m,nBjαUNβ,m,nBjαUNβ

Questo è, ovviamente, solo uno schizzo; in realtà, una chiusura dello stato deve essere calcolata per prima e solo allora possiamo occuparci di transizioni / turni e risoluzioni.

Trasformare l'automa in una tabella di analisi a turni è in seguito banale; solo, come una variazione minore, gli autori dell'articolo interpretano una risoluzione come l'azione di accettazione. Dato l'automa risultante, ho trovato più semplice trattare uno spostamento di $ come azione di accettazione.r0,0$

Domande

Il primo è, ovviamente, se il processo sopra descritto è corretto.

Il secondo riguarda le relazioni di equivalenza. Posso solo supporre che la relazione di equivalenza sia responsabile di decidere quali elementi di risoluzione vengono introdotti quando viene visto un elemento di turno finito. κ 0 sembra dare risultati sorprendentemente simili ai set di parser LSLR F O L L O W L M. L'articolo descrive una "relazione di equivalenza più fine" a pagina 11; c'è un modo per interpretare questa relazione in termini intuitivi? Ci sono altre relazioni conosciute?κκ0FOLLOWLM

E l'ultimo riguarda la risoluzione dei conflitti. L'articolo descrive bene ciò che costituisce un'inadeguatezza in un automa a turni; c'è un modo per risolvere queste inadeguatezze, simile ai modi di risolvere i conflitti in un parser LR tradizionale? Qualcosa come la risoluzione dei conflitti in stile yacc tramite precedenza e associatività potrebbe essere implementato in un generatore di parser ShRe?

Grazie se leggi tutto questo ed eventuali risposte saranno molto apprezzate :)


suggerire di migrare questa domanda su cstheory. per quanto riguarda l'articolo, sembra essere un algoritmo molto complesso che "probabilmente" (?) non è stato implementato da nessuno. l'idea principale sembra essere quella di combinare lookahead arbitrario ma anche con analisi del tempo lineare ...? ma quante applicazioni andrebbero bene con un algoritmo superlineare più semplice, più standard? qualche idea, quale applicazione funzionerebbe meglio con questo approccio? ne hai uno o ne conosci uno?
vzn,

1
Un esercizio teorico molto bello (anche se non ho esaminato i tecnicismi). Dato che la piena potenza di LR (k) spesso non viene nemmeno utilizzata, ci si può chiedere l'impatto pratico. Vedo 2 problemi con questo tipo di lavoro: (1) poiché l'algoritmo diventa più complesso, è ancora possibile per la mente umana modificare la grammatica e comprenderne le conseguenze, quando succede che non funziona. È un fatto frequente che tecniche altamente sofisticate siano molto gratificanti quando funzionano, ma peggiorano le cose quando non lo fanno. (2) sarà lineare nei casi in cui gli algoritmi CF generali non sono lineari.
babou,

Risposte:


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.