Generatore di parser
Un generatore di parser (a volte 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 (in genere BNF) insieme a del codice associato ad ognuna delle regole della grammatica il quale 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), o generare del codice in un altro linguaggio, a volte 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 messo da qualche parte tra un compilatore altamente configurabile e un linguaggio sintatticamente estensibile.
Altri esempi di generatori di parser simili al yacc sono Coco/R, CUP, GNU bison, Eli, FSL, META 5, MUG2, Parsley, Pre-cc, SableCC, JavaCC e MixedCC.
Tipi di generatori di parser
Candidati (incompleto)
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 (GPL) |
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, etc.) | Separati | Generato | Tutte (Java) | Open source (LGPL) |
SLK | LL(k) | C, C++, C#, Java | ? | ? | ? | ? |
Spirit | LL(k) | C++ | Misti | ? | - | Open source (Boost) |
YooParse | LR | C++ | ? | Esterno (YooLex) | ? | Open source (MIT) |
HLang | LL(k) | interpretato run-time | Separati | Interno o esterno | Tutte | Open source (GPL) |
Voci correlate
Collegamenti esterni
Bibliografia
(EN) Denis Howe, Generatore di parser, in Free On-line Dictionary of Computing. Disponibile con licenza GFDL