Generatore di parser

strumento per la generazione del codice sorgente di un compilatore

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.

StoriaModifica

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 parserModifica

Candidati (incompleto)Modifica

Prodotto Tipo Linguaggi di output Grammatica e codice Analizzatore lessicale Piattaforma Licenza
AnaGram LALR ANSI C, C++ ? ? Win32 Commerciale
ACCENT 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 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 correlateModifica

Collegamenti esterniModifica

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