Generatore di parser

strumento per la generazione del codice sorgente di un compilatore

Un generatore di parser (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 (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 (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, 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