Generatore di parser
Da Wikipedia, l'enciclopedia libera.
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 volte 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 parse tree (o AST), o generare del codice in un altro linguggio, a volte direttamente codice eseguibile.
Indice |
[modifica] 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.
[modifica] Tipi di generatori di parser
[modifica] Candidati (incompleto)
Product | Type | Output Languages | Grammar/code | Lexer | CC platform | License |
AnaGram | LALR | ANSI C, C++ | ? | ? | Win32 | Commercial |
ACCENT | GLR | C | Mixed | ? | ? | Open source (GPL) |
ANTLR | LL(k) | C++, C#, Java, Python | Mixed | Generated | All (Java) | Open source (BSD) |
Beaver | LALR | Java | Mixed | External | All (Java) | Open source (BSD) |
Bison | LALR | C | Mixed | External (Flex) | Unix, Win32 | Open source (GPL) |
BYACC | LALR | C | Mixed | External | Unix, Win32 | Public domain |
BYACC/J | LALR | C, Java | Mixed | External (JFlex) | Irix, Linux, Solaris, Win32 | Public domain |
Coco/R | LL(k) | C++, C#, Java | Mixed | Generated | ? | Open source (GPL) |
CppCC | LL(k) | C++ | ? | ? | ? | Open source (GPL) |
CUP | LALR | Java | Mixed | External (JLex) | All (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 | Separated | Generated | All (Java) | Open source (GPL) |
jacc | LALR | Java | Mixed | ? | All (Java) | Open source (BSD) |
JavaCC | LL(k) | Java | ? | Generated | ? | ? |
jay | LALR | Java | ? | ? | Unix | ? |
LEMON | LALR | ? | ? | ? | ? | ? |
LRgen | LALR | C++, Any (if you rewrite the skeleton) | Separated | Generated | Win32 | Commercial |
Parser Objects | LL(k) | Java | Mixed | ? | All (Java) | Open source (ZLib/LibPNG) |
PRECC | LL(k) | ? | ? | ? | Dos, Unix | ? |
SableCC | LALR | Java (and, with "altgen" engine, Python, C++, OCAML, etc.) | Separated | ? | All (Java) | Open source (LGPL) |
SLK | LL(k) | C, C++, C#, Java | ? | ? | ? | ? |
Spirit | LL(k) | C++ | Mixed | ? | - | Open source (Boost) |
YooParse | LR | C++ | ? | External (YooLex) | ? | Open source (MIT) |
[modifica] Voci correlate
[modifica] Collegamenti esterni
[modifica] Riferimenti
Questa voce si basa su materiale disponibile sul Free On-line Dictionary of Computing e il suo utilizzo è regolamentato dalla licenza GFDL.