In questo articolo esploreremo l'impatto che Generatore di parser ha avuto sulla società moderna. Per comprenderne la rilevanza analizzeremo diversi aspetti che vanno dalla sua origine alla sua evoluzione nel tempo. Nel corso della storia, Generatore di parser ha svolto un ruolo cruciale in diversi ambiti, dalla cultura alla tecnologia, influenzando in modo significativo il modo in cui le persone interagiscono e funzionano nel mondo di oggi. Attraverso un approccio multidisciplinare, esamineremo da vicino come Generatore di parser ha lasciato il segno nella società e quali prospettive si stanno aprendo attorno ad essa.
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.
| 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) |
| LL(k) | C, C++, C#, Java | ? | ? | ? | ? | |
| Spirit | LL(k) | C++ | Misti | ? | - | Open source (Boost) |
| YooParse | LR | C++ | ? | Esterno (YooLex) | ? | Open source (MIT) |
| [collegamento interrotto] | LL(k) | interpretato run-time | Separati | Interno o esterno | Tutte | Open source (GPL) |