# 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 |
| 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/ 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 HLang] | LL(k) | interpretato run-time | Separati | Interno o esterno | Tutte | Open source (GPL) |