Generatore di parser

Da Wikipedia, l'enciclopedia libera.

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 (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[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 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[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 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[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]

Bibliografia[modifica | modifica wikitesto]