Generatore di parser

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

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.

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]
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica