Vai al contenuto

Generatore di parser

Da Wikipedia, l'enciclopedia libera.

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.

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
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/[collegamento interrotto] 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[collegamento interrotto] HLang][collegamento interrotto]LL(k)interpretato run-timeSeparatiInterno o esternoTutteOpen source (GPL)

Voci correlate

[modifica | modifica wikitesto]

Collegamenti esterni

[modifica | modifica wikitesto]
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica