Generatore di parser

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

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.

Candidati (incompleto)

Prodotto Tipo Linguaggi di output Grammatica e codice Analizzatore lessicale Piattaforma Licenza
AnaGramLALRANSI C, C++??Win32Commerciale
ACCENT Archiviato il 16 maggio 2010 in Internet Archive.GLRCMisti??Open source (GPL)
ANTLRLL(k)C++, C#, Java, PythonMistiGeneratoTutte (Java)Open source (BSD)
BeaverLALRJavaMistiEsternoTutte (Java)Open source (BSD)
BisonLALRCMistiEsterno (flex)Unix, Win32Open source (GPL)
BYACCLALRCMistiEsternoUnix, Win32Dominio pubblico
BYACC/JLALRC, JavaMistiEsterno (JFlex)Irix, Linux, Solaris, Win32Dominio pubblico
Coco/RLL(k)C++, C#, JavaMistiGenerato?Open source (GPL)
CppCCLL(k)C++???Open source (GPL)
CUPLALRJavaMistiEsterno (JLex)Tutte (Java)Open source (GPL)
ElkhoundGLRC++, Ocaml???Open source (BSD)
GOLD Archiviato il 2 novembre 2008 in Internet Archive.LALRANSI C, C#, Delphi, Java, Python, Visual Basic, Visual C++??Win32Open source (zlib/libpng)
GrammaticaLL(k)C#, JavaSeparatiGeneratoTutte (Java)Open source (LGPL)
jaccLALRJavaMisti?Tutte (Java)Open source (BSD)
JavaCCLL(k)Java?Generato??
jayLALRJava??Unix?
LEMONLALR?????
LRgenLALRC++, Qualsiasi (riscrivendo il modello)SeparatiGeneratoWin32Commerciale
Parser ObjectsLL(k)JavaMisti?Tutte (Java)Open source (ZLib/LibPNG)
PRECCLL(k)???Dos, Unix?
SableCCLALRJava (e, col motore "altgen", Python, C++, OCAML, ecc.)SeparatiGeneratoTutte (Java)Open source (LGPL)
[https://web.archive.org/web/20090221213519/http://members.cox.net/slkpg/ SLK]LL(k)C, C++, C#, Java????
SpiritLL(k)C++Misti? -Open source (Boost)
YooParseLRC++?Esterno (YooLex)?Open source (MIT)
[http://www.horion.it/download.php HLang]LL(k)interpretato run-timeSeparatiInterno o esternoTutteOpen source (GPL)

Voci correlate

Collegamenti esterni