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
modificaIl 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
modificaCandidati (incompleto)
modificaProdotto | 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
modificaCollegamenti esterni
modifica- (EN) Denis Howe, Parser generator, in Free On-line Dictionary of Computing. Disponibile con licenza GFDL
- Brooker Autocodes, su computer50.org. URL consultato il 1º ottobre 2005 (archiviato dall'url originale il 31 ottobre 2004).
- Corso di linguaggi e traduttori in jflex/cup, su skenz.it.
- Programmi eseguiti con jflex/cup o con flex/bison, su skenz.it. URL consultato il 18 febbraio 2008 (archiviato dall'url originale il 18 aprile 2021).