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

Candidati (incompleto) ProdottoTipoLinguaggi di outputGrammatica e codiceAnalizzatore lessicalePiattaformaLicenza 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, ecc.) 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) LL(k) interpretato run-time Separati Interno o esterno Tutte Open source (GPL)

Voci correlate GNU Bison Yacc ANTLR

Collegamenti esterni

Categoria:Software di sistema Categoria:Parsing