Indice
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
[modifica | modifica wikitesto]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 |
---|---|---|---|---|---|---|
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
[modifica | modifica wikitesto]Collegamenti esterni
[modifica | modifica wikitesto]- (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).