Generator de analizori
Acest articol sau secțiune referitoare la informatică este considerat a fi verificat . |
Un generator de parser (în engleză parser generator, uneori numit și compilator-compilator) este un instrument pentru generarea codului sursă al unui parser , un interpret sau un compilator din descrierea dată de un limbaj adnotat sub formă de gramatică, în general BNF , împreună cu un anumit cod asociat cu fiecare dintre regulile gramaticale, cod care trebuie executat de fiecare dată când regula este aplicată de către analizor. Aceste bucăți de cod sunt adesea numite funcții de acțiune semantică , deoarece definesc semantica structurii sintactice analizate de analizor. În funcție de tipul parserului generat, aceste funcții pot construi un arbore de sintaxă concret sau abstract sau pot genera cod în altă limbă, uneori cod direct executabil.
Istorie
Primul generator de parser care a folosit acest nume a fost scris de Tony Brooker în 1960 și a fost folosit pentru a crea compilatoare pentru computerele Atlas de la Universitatea din Manchester , inclusiv compilatorul Atlas Autocode . Cu toate acestea, generatorul a fost ușor diferit de generatoarele moderne și astăzi ar fi probabil considerat undeva între un compilator extrem de configurabil și un limbaj extensibil sintactic.
Alte exemple de generatoare de analize de tip yacc sunt Coco / R , CUP , GNU bison , Eli, FSL, META 5, MUG2, Pătrunjel , Pre-cc , SableCC , JavaCC și MixedCC .
Tipuri de generatoare de parser
Candidați (incomplet)
Produs | Tip | Limbi de ieșire | Gramatică și cod | Analizor lexical | Platformă | Licență |
---|---|---|---|---|---|---|
Anagramă | LALR | ANSI C, C ++ | ? | ? | Win32 | Comercial |
ACCENT | GLR | C. | Amestecat | ? | ? | Open source (GPL) |
ANTLR | LL (k) | C ++, C #, Java, Python | Amestecat | Generat | Toate (Java) | Open source (BSD) |
Castor | LALR | Java | Amestecat | Extern | Toate (Java) | Open source (BSD) |
Bizoni | LALR | C. | Amestecat | Extern ( flex ) | Unix, Win32 | Open source (GPL) |
BYACC | LALR | C. | Amestecat | Extern | Unix, Win32 | Domeniu public |
BYACC / J | LALR | C, Java | Amestecat | Extern (JFlex) | Irix, Linux, Solaris, Win32 | Domeniu public |
Coco / R | LL (k) | C ++, C #, Java | Amestecat | Generat | ? | Open source (GPL) |
CppCC | LL (k) | C ++ | ? | ? | ? | Open source (GPL) |
CEAȘCĂ | LALR | Java | Amestecat | Extern (JLex) | Toate (Java) | Open source (GPL) |
Elkhound | GLR | C ++, Ocaml | ? | ? | ? | Open source (BSD) |
AUR | LALR | ANSI C, C #, Delphi, Java, Python, Visual Basic, Visual C ++ | ? | ? | Win32 | Open source (zlib / libpng) |
Gramatică | LL (k) | C #, Java | Separa | Generat | Toate (Java) | Open source (LGPL) |
jacc | LALR | Java | Amestecat | ? | Toate (Java) | Open source (BSD) |
JavaCC | LL (k) | Java | ? | Generat | ? | ? |
jay | LALR | Java | ? | ? | Unix | ? |
LĂMÂIE | LALR | ? | ? | ? | ? | ? |
LRgen | LALR | C ++, Orice (rescrierea modelului) | Separa | Generat | Win32 | Comercial |
Obiecte Parser | LL (k) | Java | Amestecat | ? | Toate (Java) | Open source (ZLib / LibPNG) |
ANTERIOR | LL (k) | ? | ? | ? | Dos, Unix | ? |
SableCC | LALR | Java (și, cu motorul "altgen", Python, C ++, OCAML etc.) | Separa | Generat | Toate (Java) | Open source (LGPL) |
[ https://web.archive.org/web/20090221213519/http://members.cox.net/slkpg/ [ link rupt ] SLK] | LL (k) | C, C ++, C #, Java | ? | ? | ? | ? |
Spirit | LL (k) | C ++ | Amestecat | ? | - | Open source (Boost) |
YooParse | LR | C ++ | ? | Extern (YooLex) | ? | Open source (MIT) |
[ http://www.horion.it/download.php [ link rupt ] HLang] [ link rupt ] | LL (k) | timp de rulare interpretat | Separa | Intern sau extern | Toate | Open source (GPL) |
Elemente conexe
linkuri externe
- ( EN ) Generator de analizori , în Free On-line Dictionary of Computing , Denis Howe. Disponibil sub licență GFDL
- Brooker Autocodes , la computer50.org . Adus la 1 octombrie 2005 (arhivat din original la 31 octombrie 2004) .
- Curs de limbi străine și traducători în jflex / cup , pe skenz.it .
- Programe efectuate cu jflex / cup sau cu flex / bizon , pe skenz.it .