Generatore di parser

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

Un generatore di parser (in inglese parser generator, a volte anche chiamato compiler-compiler) è uno strumento per la generazione del codice sorgente di un parser, un interprete o un compilatore a partire dalla descrizione data da un linguaggio annotato nella forma di grammatica, generalmente BNF, insieme a del codice associato ad ognuna delle regole della grammatica, codice che deve essere eseguito ogni volta che la regola è applicata dal parser. Questi pezzi di codice sono spesso chiamati funzioni di azioni semantiche poiché definiscono la semantica della struttura sintattica analizzata dal parser. A seconda del tipo di parser generato, queste funzioni possono costruire un albero sintattico concreto o astratto oppure possono generare del codice in un altro linguaggio, talvolta direttamente codice eseguibile.

Storia[modifica | modifica wikitesto]

Il primo generatore di parser che ha usato questo nome fu scritto da Tony Brooker nel 1960 ed era usato per creare i compilatori per i computer Atlas presso l'Università di Manchester, includendo il compilatore Atlas Autocode. Tuttavia il generatore era leggermente differente dai moderni generatori, e oggi probabilmente sarebbe considerato una via di mezzo tra un compilatore altamente configurabile e un linguaggio sintatticamente estensibile.

Altri esempi di generatori di parser simili allo yacc sono Coco/R, CUP, GNU bison, Eli, FSL, META 5, MUG2, Parsley, Pre-cc, SableCC, JavaCC e MixedCC.

Tipi di generatori di parser[modifica | modifica wikitesto]

Candidati (incompleto)[modifica | modifica wikitesto]

Prodotto Tipo Linguaggi di output Grammatica e codice Analizzatore lessicale Piattaforma Licenza
AnaGram LALR ANSI C, C++ ? ? Win32 Commerciale
ACCENT Archiviato il 16 maggio 2010 in Internet Archive. GLR C Misti ? ? Open source (GPL)
ANTLR LL(k) C++, C#, Java, Python Misti Generato Tutte (Java) Open source (BSD)
Beaver LALR Java Misti Esterno Tutte (Java) Open source (BSD)
Bison LALR C Misti Esterno (flex) Unix, Win32 Open source (GPL)
BYACC LALR C Misti Esterno Unix, Win32 Dominio pubblico
BYACC/J LALR C, Java Misti Esterno (JFlex) Irix, Linux, Solaris, Win32 Dominio pubblico
Coco/R LL(k) C++, C#, Java Misti Generato ? Open source (GPL)
CppCC LL(k) C++ ? ? ? Open source (GPL)
CUP LALR Java Misti Esterno (JLex) Tutte (Java) Open source (GPL)
Elkhound GLR C++, Ocaml ? ? ? Open source (BSD)
GOLD Archiviato il 2 novembre 2008 in Internet Archive. LALR ANSI C, C#, Delphi, Java, Python, Visual Basic, Visual C++ ? ? Win32 Open source (zlib/libpng)
Grammatica LL(k) C#, Java Separati Generato Tutte (Java) Open source (LGPL)
jacc LALR Java Misti ? Tutte (Java) Open source (BSD)
JavaCC LL(k) Java ? Generato ? ?
jay LALR Java ? ? Unix ?
LEMON LALR ? ? ? ? ?
LRgen LALR C++, Qualsiasi (riscrivendo il modello) Separati Generato Win32 Commerciale
Parser Objects LL(k) Java Misti ? Tutte (Java) Open source (ZLib/LibPNG)
PRECC LL(k) ? ? ? Dos, Unix ?
SableCC LALR Java (e, col motore "altgen", Python, C++, OCAML, ecc.) Separati Generato Tutte (Java) Open source (LGPL)
[https://web.archive.org/web/20090221213519/http://members.cox.net/slkpg/[collegamento interrotto] SLK] LL(k) C, C++, C#, Java ? ? ? ?
Spirit LL(k) C++ Misti ?  - Open source (Boost)
YooParse LR C++ ? Esterno (YooLex) ? Open source (MIT)
[http://www.horion.it/download.php[collegamento interrotto] HLang][collegamento interrotto] LL(k) interpretato run-time Separati Interno o esterno Tutte Open source (GPL)

Voci correlate[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]

  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica