GLR risorse algoritmo di analisi
-
22-09-2019 - |
Domanda
Sto scrivendo un GLR generatore di parser e vorrei qualche consiglio su risorse relative a questo algoritmo sia su internet e della varietà dead-tree ( libri per chi non conosce il geek-parlare).
Lo so Bison può generare parser GLR, e dato che è sotto la licenza GPL che può esaminare il suo codice, ma sarebbe bello avere una descrizione completa dell'algoritmo.
Così, qualcuno sa di eventuali buone risorse là fuori che posso fare uso di? Grazie.
Soluzione
Alcune cose buone che ho incontrato prima linea:
- Elkhound , un altro open source GLR parser: Scott McPeak, George C. Necula. Elkhound: un veloce, pratico generatore di parser GLR . In Atti del Convegno sul compilatore Constructor (CC04), aprile 2004.
e per ulteriori dettagli:
- UCB / CSSD-2-1214 tecnico rapporto , che è una versione ampliata del sopra di carta;
- la carta fa riferimento nel documentazione Bison : Elizabeth Scott, Adrian Johnstone e Shamsa Sadaf Hussain. Tomita-Style generalizzate LR Parser . TR-00-12, Royal Holloway, Università di Londra, Dipartimento di Informatica, dicembre 2000.
E so di una terza open source GLR parser:. DParser
Altri suggerimenti
Adrian Johnstone pubblica un sacco di lavoro sulle versioni avanzate di algoritmi GLR. Il suo pubblicazioni sito sarà probabilmente una risorsa interessante.
La migliore descrizione che io abbia mai visto, con le immagini che illustrano ogni passo dell'algoritmo, è contenuta in questo libro:
Per pseudocodice, andare alla fonte: Generalized LR Parsing da Tomita, pagina 70 o giù di lì. carta di Farshi contiene una descrizione compatta.
E 'una delle tecniche che ho provato per qb.js ( qbasic in javascript ).
Da quello che io sappia, funziona lo stesso come un parser LALR -. Tranne quando incontra un'ambiguità
Quando lo fa, si divide sostanzialmente in analizza separati corrispondenti alle possibili opzioni in quel punto, e continua con loro in tandem - quando un parse fallisce (a causa di incontrare un elemento illegale), è semplicemente caduto, perché deve sono stati una supposizione sbagliata al un'ambiguità precedente.
Alla fine, tutti tranne uno parse sarebbe dovuto morire -. Ed il superstite è il parse "corretto" di quei punti ambigui