Porovnání generátorů syntaktických analyzátorů - Comparison of parser generators
![]() | tento článek možná matoucí nebo nejasné čtenářům.Březen 2014) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
Toto je seznam pozoruhodných generátory lexerů a generátory analyzátoru pro různé jazykové kurzy.
Běžné jazyky
Běžné jazyky jsou kategorií jazyků (někdy nazývaných Chomsky typ 3 ) které lze spárovat pomocí stavového automatu (konkrétněji pomocí a deterministický konečný automat nebo a nedeterministický konečný automat ) postavený z a regulární výraz. Pravidelný jazyk může zejména odpovídat konstrukcím jako „A následuje B“, „Buď A nebo B“, „A, následuje nula nebo více instancí B“, ale nemůže odpovídat konstruktům, které vyžadují konzistenci mezi nesousedícími prvky, například jako „některé instance A následované stejným počtem instancí B“ a také nemohou vyjádřit koncept rekurzivního „vnoření“ („za každým A nakonec následuje odpovídající B“). Klasickým příkladem problému, který běžná gramatika nezvládne, je otázka, zda daný řetězec obsahuje správně vnořené závorky. (Toto obvykle řeší gramatika Chomsky typu 2, také nazývaná a bezkontextová gramatika.)
název | Lexerův algoritmus | Výstupní jazyky | Gramatika, kód | Vývojová platforma | Licence |
---|---|---|---|---|---|
Alexi | DFA | Haskell | Smíšený | Všechno | Volný, uvolnit, BSD |
AnnoFlex | DFA | Jáva | Smíšený | Virtuální stroj Java | Volný, uvolnit, BSD |
Vzhůru | DFA poháněný stolem, s větvením | C ++ | Pouze gramatika (akční) | Všechno | Volný, uvolnit, MIT |
AustenX | DFA | Jáva | Samostatný | Všechno | Volný, uvolnit, BSD |
C # Flex | DFA | C# | Smíšený | .NET CLR | Volný, uvolnit, GNU GPL |
C # Lex | DFA | C# | Smíšený | .NET CLR | ? |
CookCC | DFA | Jáva | Smíšený | Virtuální stroj Java | Volný, uvolnit, Apache 2.0 |
DFA (vč. LRSTAR) | DFA komprimovaná matice | C ++ | Samostatný | Vizuální studio | BSD |
Delfín | DFA | C ++ | Samostatný | Všechno | Proprietární |
Flex | DFA řízený stolem | C, C ++ | Smíšený | Všechno | Volný, uvolnit, BSD |
gelex | DFA | Eiffelova | Smíšený | Eiffelova | Volný, uvolnit, MIT |
golex | DFA | Jít | Smíšený | Jít | Volný, uvolnit, BSD -styl |
komplex | DFA | C# | Smíšený | .NET CLR | Volný, uvolnit, BSD -jako |
JFlex | DFA | Jáva | Smíšený | Virtuální stroj Java | Volný, uvolnit, BSD |
JLex | DFA | Jáva | Smíšený | Virtuální stroj Java | Volný, uvolnit, BSD -jako |
lex | DFA | C | Smíšený | POSIX | Částečný, proprietární, CDDL |
lexertl | DFA | C ++ | ? | Všechno | Volný, uvolnit, GNU LGPL |
Quex | DFA přímý kód | C, C ++ | Smíšený | Všechno | Volný, uvolnit, GNU LGPL |
Ragel | DFA | Jít, C, C ++, shromáždění | Smíšený | Všechno | Volný, uvolnit, GNU GPL, MIT[1][2] |
Reflex | DFA přímý kód, řízený tabulkou DFA a NFA regex knihovny | C ++ | Smíšený | Všechno | Volný, uvolnit, BSD |
re2c | DFA přímý kód | C | Smíšený | Všechno | Volný, uvolnit, veřejná doména |
Deterministické bezkontextové jazyky
Bezkontextové jazyky jsou kategorií jazyků (někdy nazývaných Chomsky typ 2 ) které lze porovnat posloupností pravidel nahrazení, z nichž každé v zásadě mapuje každý neterminální prvek na posloupnost koncových prvků a / nebo jiných neterminálních prvků. Gramatiky tohoto typu se mohou shodovat se vším, co lze porovnat pomocí a běžná gramatika, a dále zvládne koncept rekurzivního "vnoření" ("každé A nakonec následuje odpovídající B"), jako je otázka, zda daný řetězec obsahuje správně vnořené závorky. Pravidla bezkontextových gramatik jsou čistě lokální, a proto nemohou zpracovat otázky, které vyžadují nelokální analýzu, například „Existuje deklarace pro každou proměnnou, která se používá ve funkci?“. Technicky by to vyžadovalo složitější gramatiku, jako je gramatika typu Chomsky typu 1, také nazývaná a kontextová gramatika. Generátory syntaktických analyzátorů pro bezkontextové gramatiky však často podporují schopnost uživatelem psaného kódu zavádět omezené množství kontextové citlivosti. (Například při zjištění deklarace proměnné může uživatelsky napsaný kód uložit název a typ proměnné do externí datové struktury, aby je bylo možné porovnat s pozdějšími odkazy na proměnné zjištěnými analyzátorem.)
The deterministické bezkontextové jazyky jsou správnou podmnožinou bezkontextových jazyků, které lze efektivně analyzovat deterministické posunovací automaty.
název | Analýza algoritmus | Vstupní gramatická notace | Výstupní jazyky | Gramatika, kód | Lexer | Vývojová platforma | IDE | Licence |
---|---|---|---|---|---|---|---|---|
AGL | GLR | EBNF | Jáva, JavaScript, (další cíle Kotlin) | Samostatný | žádný | Libovolná cílová platforma Kotlin | Ne | Volný, uvolnit, Apache 2.0 |
ANTLR 4 | Adaptivní LL (*)[3] | EBNF | C#, Jáva, Krajta, JavaScript, C ++, Rychlý, Jít, PHP | Samostatný | generováno | Virtuální stroj Java | Ano | Volný, uvolnit, BSD |
ANTLR 3 | LL (*) | EBNF | ActionScript, Ada95, C, C ++, C#, Jáva, JavaScript, Cíl-C, Perl, Krajta, Rubín | Smíšený | generováno | Virtuální stroj Java | Ano | Volný, uvolnit, BSD |
APG | Rekurzivní sestup, ustoupit | ABNF | C, C ++, JavaScript, Jáva | Samostatný | žádný | Všechno | Ne | Volný, uvolnit, GNU GPL |
Vzhůru | LL (k), LL (konečný), LL (*) | Astirská hierarchická gramatika | C ++ | Pouze gramatika (akční) | generováno | Všechno | Kód sady Visual Studio | Volný, uvolnit, MIT |
SEKERA | Rekurzivní sestup | AX / C ++ | C ++ 17, C ++ 11 | Smíšený | žádný | Jakékoli s C ++ 17 nebo C ++ 11 standardní překladač | Ne | Volný, uvolnit, Zvýšit |
Bobr | LALR (1) | EBNF | Jáva | Smíšený | externí | Virtuální stroj Java | Ne | Volný, uvolnit, BSD |
Belr | Rekurzivní sestup | ABNF | C ++ 17, C ++ 11 | Samostatný | zahrnuta | POSIX | Ne | Částečný, GNU GPL, proprietární |
Bison | LALR (1), LR (1), IELR (1), GLR | Yacc | C, C ++, Jáva | Smíšený | externí | Všechno | Ne | Volný, uvolnit, GNU GPL s výjimkou |
Bison ++[poznámka 1] | LALR (1) | ? | C ++ | Smíšený | externí | POSIX | Ne | Volný, uvolnit, GNU GPL |
Bisonc ++ | LALR (1) | ? | C ++ | Smíšený | externí | POSIX | Ne | Volný, uvolnit, GNU GPL |
BtYacc | Backtracking Zdola nahoru | ? | C ++ | Smíšený | externí | Všechno | Ne | Volný, uvolnit, veřejná doména |
byacc | LALR (1) | Yacc | C | Smíšený | externí | Všechno | Ne | Volný, uvolnit, veřejná doména |
BYACC / J | LALR (1) | Yacc | C, Jáva | Smíšený | externí | Všechno | Ne | Volný, uvolnit, veřejná doména |
CL-Yacc | LALR (1) | Lisp | Společný Lisp | Smíšený | externí | Všechno | Ne | Volný, uvolnit, MIT |
Coco / R | LL (1) | EBNF | C, C ++, C#, F#, Jáva, Ada, Objekt Pascal, Delphi, Modula-2, Oberon, Rubín, Rychlý, Unicon, Visual Basic .NET | Smíšený | generováno | Virtuální stroj Java, .NET Framework, Okna, POSIX (záleží na výstupním jazyce) | Ne | Volný, uvolnit, GNU GPL |
CookCC | LALR (1) | Anotace Java | Jáva | Smíšený | generováno | Virtuální stroj Java | Ne | Volný, uvolnit, Apache 2.0 |
CppCC | LL (k) | ? | C ++ | Smíšený | generováno | POSIX | Ne | Volný, uvolnit, GNU GPL |
CSP | LR (1) | ? | C ++ | Samostatný | generováno | POSIX | Ne | Volný, uvolnit, Apache 2.0 |
POHÁR | LALR (1) | ? | Jáva | Smíšený | externí | Virtuální stroj Java | Ne | Volný, uvolnit, BSD -jako |
Drak | LR (1), LALR (1) | ? | C ++, Jáva | Samostatný | generováno | Všechno | Ne | Volný, uvolnit, GNU GPL |
eli | LALR (1) | ? | C | Smíšený | generováno | POSIX | Ne | Volný, uvolnit, GNU GPL, GNU LGPL |
Podstata | LR (?) | ? | Schéma 48 | Smíšený | externí | Všechno | Ne | Volný, uvolnit, BSD |
eyapp | LALR (1) | ? | Perl | Smíšený | externí nebo generované | Všechno | Ne | Volný, uvolnit, Umělecký |
Mračit | LALR (k) | ? | Haskell 98 | Smíšený | externí | Všechno | Ne | Volný, uvolnit, GNU GPL |
geyacc | LALR (1) | ? | Eiffelova | Smíšený | externí | Všechno | Ne | Volný, uvolnit, MIT |
ZLATO | LALR (1) | BNF | x86 assembler, ANSI C., C#, D, Jáva, Pascal, Objekt Pascal, Krajta, Visual Basic 6, Visual Basic .NET, Visual C ++ | Samostatný | generováno | Okna | Ano | Volný, uvolnit, zlib upraveno |
GPPG | LALR (1) | Yacc | C# | Samostatný | externí | Okna | Ano | Volný, uvolnit, BSD |
Grammatica | LL (k) | BNF dialekt | C#, Jáva | Samostatný | generováno | Virtuální stroj Java | Ne | Volný, uvolnit, BSD |
Ahoj | LL (*) | EBNF nebo Java | Jáva | Samostatný | vnitřní | Virtuální stroj Java | Ne | Volný, uvolnit, GNU LGPL |
Generátor analyzátoru Hime | LALR (1), GLR | BNF dialekt | C#, Jáva, Rez | Samostatný | generováno | .NET Framework, Virtuální stroj Java | Ne | Volný, uvolnit, GNU LGPL |
Hyacc | LR (1), LALR (1), LR (0) | Yacc | C | Smíšený | externí | Všechno | Ne | Volný, uvolnit, GNU GPL |
iyacc | LALR (1) | Yacc | Ikona | Smíšený | externí | Všechno | Ne | Volný, uvolnit, GNU LGPL |
jacc | LALR (1) | ? | Jáva | Smíšený | externí | Virtuální stroj Java | Ne | Volný, uvolnit, BSD |
JavaCC | LL (k) | EBNF | Jáva, C ++, JavaScript (přes GWT překladač)[4] | Smíšený | generováno | Virtuální stroj Java | Ano | Volný, uvolnit, BSD |
sojka | LALR (1) | Yacc | C#, Jáva | Smíšený | žádný | Virtuální stroj Java | Ne | Volný, uvolnit, BSD |
JFLAP | LL (1), LALR (1) | ? | Jáva | ? | ? | Virtuální stroj Java | Ano | ? |
JetPAG | LL (k) | ? | C ++ | Smíšený | generováno | Všechno | Ne | Volný, uvolnit, GNU GPL |
JS / CC | LALR (1) | EBNF | JavaScript, JScript, ECMAScript | Smíšený | vnitřní | Všechno | Ano | Volný, uvolnit, BSD |
KDevelop-PG-Qt | LL (1), ustoupit, posunovací dvůr | ? | C ++ | Smíšený | generované nebo externí | Všechno, KDE | Ne | Volný, uvolnit, GNU LGPL |
Kelbt | Backtracking LALR (1) | ? | C ++ | Smíšený | generováno | POSIX | Ne | Volný, uvolnit, GNU GPL |
kmyacc | LALR (1) | ? | C, Jáva, Perl, JavaScript | Smíšený | externí | Všechno | Ne | Volný, uvolnit, GNU GPL |
LALR (vč. LRSTAR) | LALR (1) | YACC, ANTLR, EBNF | C ++ | oddělené | generováno | Okna | Vizuální studio | BSD |
Lapg | LALR (1) | ? | C, C ++, C#, Jáva, JavaScript | Smíšený | generováno | Virtuální stroj Java | Ne | Volný, uvolnit, GNU GPL |
Citrón | LALR (1) | ? | C | Smíšený | externí | Všechno | Ne | Volný, uvolnit, veřejná doména |
Limetka | LALR (1) | ? | PHP | Smíšený | externí | Všechno | Ne | Volný, uvolnit, GNU GPL |
LISA | LR (?), LL (?), LALR (?), SLR (?) | ? | Jáva | Smíšený | generováno | Virtuální stroj Java | Ano | Volný, uvolnit, veřejná doména |
LLgen | LL (1) | ? | C | Smíšený | externí | POSIX | Ne | Volný, uvolnit, BSD |
LLnextgen | LL (1) | ? | C | Smíšený | externí | Všechno | Ne | Volný, uvolnit, GNU GPL |
LLLPG | LL (k) + syntaktický a sémantické predikáty | ANTLR | C# | Smíšený | generováno (?) | .NET Framework, Mono | Vizuální studio | Volný, uvolnit, GNU LGPL |
LPG | Backtracking LALR (k) | ? | Jáva | Smíšený | generováno | Virtuální stroj Java | Ne | Volný, uvolnit, EPL |
LRSTAR | LALR (*), LR (*) | YACC, ANTLR, EBNF | C ++ | oddělené | generováno | Okna | Vizuální studio | BSD |
Menhir | LR (1) | ? | OCaml | Smíšený | generováno | Všechno | Ne | Volný, uvolnit, QPL |
ML-Yacc | LALR (1) | ? | ML | Smíšený | externí | Všechno | Ne | ? |
Opice | LR (1) | ? | Jáva | Samostatný | generováno | Virtuální stroj Java | Ne | Volný, uvolnit, GNU GPL |
Msta | LALR (k), LR (k) | YACC, EBNF | C, C ++ | Smíšený | externí nebo generované | POSIX, Cygwin | Ne | Volný, uvolnit, GNU GPL |
MTP (více než analýza) | LL (1) | ? | Jáva | Samostatný | generováno | Virtuální stroj Java | Ne | Volný, uvolnit, GNU GPL |
MyParser | LL (*) | Snížení | C ++ 11 | Samostatný | vnitřní | Libovolné se standardním překladačem C ++ 11 | Ne | Volný, uvolnit, MIT |
NLT | GLR | C# /BNF -jako | C# | Smíšený | smíšený | .NET Framework | Ne | Volný, uvolnit, MIT |
ocamlyacc | LALR (1) | ? | OCaml | Smíšený | externí | Všechno | Ne | Volný, uvolnit, QPL |
olex | LL (1) | ? | C ++ | Smíšený | generováno | Všechno | Ne | Volný, uvolnit, GNU GPL |
Parsec | LL, ustoupit | Haskell | Haskell | Smíšený | žádný | Všechno | Ne | Volný, uvolnit, BSD |
Parse :: Yapp | LALR (1) | ? | Perl | Smíšený | externí | Všechno | Ne | Volný, uvolnit, GNU GPL |
Analyzátor objektů | LL (k) | ? | Jáva | Smíšený | ? | Virtuální stroj Java | Ne | Volný, uvolnit, zlib |
PCCTS | LL | ? | C, C ++ | ? | ? | Všechno | Ne | ? |
VRSTVA | LALR (1) | BNF | Krajta | Smíšený | generováno | Všechno | Ne | Volný, uvolnit, MIT |
PlyPlus | LALR (1) | EBNF | Krajta | Samostatný | generováno | Všechno | Ne | Volný, uvolnit, MIT |
PRECC | LL (k) | ? | C | Samostatný | generováno | DOS, POSIX | Ne | Volný, uvolnit, GNU GPL |
QLALR | LALR (1) | ? | C ++ | Smíšený | externí | Všechno | Ne | Volný, uvolnit, GNU GPL |
SableCC | LALR (1) | ? | C, C ++, C#, Jáva, OCaml, Krajta | Samostatný | generováno | Virtuální stroj Java | Ne | Volný, uvolnit, GNU LGPL |
SLK[5] | LL (k) LR (k) LALR (k) | EBNF | C, C ++, C#, Jáva, JavaScript | Samostatný | externí | Všechno | Ne | SLK[6] |
MAZANÝ | LALR (1) | BNF | Krajta | Smíšený | generováno | Všechno | Ne | Volný, uvolnit, MIT |
SP (Simple Parser) | Rekurzivní sestup | Krajta | Krajta | Samostatný | generováno | Všechno | Ne | Volný, uvolnit, GNU LGPL |
Duch | Rekurzivní sestup | ? | C ++ | Smíšený | vnitřní | Všechno | Ne | Volný, uvolnit, Zvýšit |
Styx | LALR (1) | ? | C, C ++ | Samostatný | generováno | Všechno | Ne | Volný, uvolnit, GNU LGPL |
Sweet Parser | LALR (1) | ? | C ++ | Samostatný | generováno | Okna | Ne | Volný, uvolnit, zlib |
Klepněte na | LL (1) | ? | C ++ | Smíšený | generováno | Všechno | Ne | Volný, uvolnit, GNU GPL |
Textový transformátor | LL (k) | ? | C ++ | Smíšený | generováno | Okna | Ano | Proprietární |
TinyPG | LL (1) | ? | C#, Visual Basic | ? | ? | Okna | Ano | Částečný, CPOL 1.0 |
Generátor analyzátoru hraček | Rekurzivní sestup | ? | Krajta | Smíšený | generováno | Všechno | Ne | Volný, uvolnit, GNU LGPL |
TP Yacc | LALR (1) | ? | Turbo Pascal | Smíšený | externí | Všechno | Ano | Volný, uvolnit, GNU GPL |
Tunnel Grammar Studio | Rekurzivní sestup, ustoupit | ABNF | C ++ | Samostatný | generováno | Okna | Ano | Proprietární |
UltraGram | LALR (1), LR (1), GLR | BNF | C ++, Java, C #, Visual Basic .NET | Samostatný | externí | Okna | Ano | Volný, uvolnit, veřejná doména |
UniCC | LALR (1) | EBNF | C, C ++, Krajta, JavaScript, JSON, XML | Smíšený | generováno | POSIX | Ne | Volný, uvolnit, BSD |
UrchinCC | LL (1) | ? | Jáva | ? | generováno | Virtuální stroj Java | Ne | ? |
Velryba | LR (?), nějaké spojovací věci, viz Velrybí tele | ? | C ++ | Smíšený | externí | Všechno | Ne | Proprietární |
moudrý | LALR (1) | ? | C ++, Jáva | Smíšený | externí | Všechno | Ne | Volný, uvolnit, GNU GPL |
Yacc AT&T /slunce | LALR (1) | Yacc | C | Smíšený | externí | POSIX | Ne | Volný, uvolnit, CPL & CDDL |
Yacc ++ | LR (1), LALR (1) | Yacc | C ++, C# | Smíšený | generované nebo externí | Všechno | Ne | Proprietární |
Yapps | LL (1) | ? | Krajta | Smíšený | generováno | Všechno | Ne | Volný, uvolnit, MIT |
yecc | LALR (1) | ? | Erlang | Samostatný | generováno | Všechno | Ne | Volný, uvolnit, Apache 2.0 |
Vizuální BNF | LR (1), LALR (1) | ? | C# | Samostatný | generováno | .NET Framework | Ano | Proprietární |
YooParse | LR (1), LALR (1) | ? | C ++ | Smíšený | externí | Všechno | Ne | Volný, uvolnit, MIT |
Analyzovat | LR (1) | BNF v C ++ typy | ? | ? | žádný | Standardní kompilátor C ++ 11 | Ne | Volný, uvolnit, MIT |
GGLL | LL (1) | Graf | Jáva | Smíšený | generováno | Okna | Ano | Volný, uvolnit, MIT |
Produkt | Analýza algoritmus | Vstupní gramatická notace | Výstupní jazyky | Gramatika, kód | Lexer | Vývojová platforma | IDE | Licence |
Parsování gramatiky výrazů, deterministické booleovské gramatiky
Tato tabulka porovnává generátory syntaktických analyzátorů s analyzovat gramatiky výrazů, deterministický booleovské gramatiky.
název | Analýza algoritmus | Výstupní jazyky | Gramatika, kód | Vývojová platforma | Licence |
---|---|---|---|---|---|
AustenX | Packrat (upravený) | Jáva | Samostatný | Všechno | Volný, uvolnit, BSD |
Aurochs | Packrat | C, OCaml, Jáva | Smíšený | Všechno | Volný, uvolnit, GNU GPL |
BNFlite | Rekurzivní sestup | C ++ | Smíšený | Všechno | Volný, uvolnit, MIT |
Baldachýn | Packrat | Jáva, JavaScript, Krajta, Rubín | Samostatný | Všechno | Volný, uvolnit, GNU GPL |
CL-kolík | Packrat | Společný Lisp | Smíšený | Všechno | Volný, uvolnit, MIT |
Drat! | Packrat | D | Smíšený | Všechno | Volný, uvolnit, GNU GPL |
Frisby | Packrat | Haskell | Smíšený | Všechno | Volný, uvolnit, BSD |
gramatika :: kolík | Packrat | Tcl | Smíšený | Všechno | Volný, uvolnit, BSD |
Grako | Packrat + Cut + Left Rekurze | Krajta, C ++ (beta) | Samostatný | Všechno | Volný, uvolnit, BSD |
IronMeta | Packrat | C# | Smíšený | Okna | Volný, uvolnit, BSD |
Laja | 2fázové skenování shora dolů ustoupit + runtime podpora | Jáva | Samostatný | Všechno | Volný, uvolnit, GNU GPL |
lars :: Analyzátor | Packrat (podpora levé rekurze a nejednoznačnosti gramatiky) | C ++ | Totožné | Všechno | Volný, uvolnit, BSD |
LPeg | Parsovací stroj | Lua | Smíšený | Všechno | Volný, uvolnit, MIT |
tahat se | Parsovací stroj | C ++ 17 | Smíšený | Všechno | Volný, uvolnit, MIT |
Myš | Rekurzivní sestup | Jáva | Samostatný | Virtuální stroj Java | Volný, uvolnit, Apache 2.0 |
Narval | Packrat | C | Smíšený | POSIX, Okna | Volný, uvolnit, BSD |
Nearley | Earley | JavaScript | Smíšený | Všechno | Volný, uvolnit, MIT |
Nemerle.Peg | Rekurzivní sestup + Pratt | Nemerle | Samostatný | Všechno | Volný, uvolnit, BSD |
neotoma | Packrat | Erlang | Samostatný | Všechno | Volný, uvolnit, MIT |
NPEG | Rekurzivní sestup | C# | Smíšený | Všechno | Volný, uvolnit, MIT |
OMeta | Packrat (upravený, částečná memoizace) | JavaScript, Kvičet, Krajta | Smíšený | Všechno | Volný, uvolnit, MIT |
PackCC | Packrat (upravený) | C | Smíšený | Všechno | Volný, uvolnit, MIT |
Packrat | Packrat | Systém | Smíšený | Všechno | Volný, uvolnit, MIT |
Dužnatý | Packrat | Haskell | Smíšený | Všechno | Volný, uvolnit, BSD |
předvařený | Rekurzivní sestup | Jáva, Scala | Smíšený | Virtuální stroj Java | Volný, uvolnit, Apache 2.0 |
Lambda PEG | Rekurzivní sestup | Jáva | Smíšený | Virtuální stroj Java | Volný, uvolnit, Apache 2.0 |
parsepp | Rekurzivní sestup | C ++ | Smíšený | Všechno | Volný, uvolnit, veřejná doména |
Pastinák | Packrat | C ++ | Smíšený | Okna | Volný, uvolnit, GNU GPL |
Vzory | Parsovací stroj | Rychlý | Totožné | Všechno | Volný, uvolnit, MIT |
kolík | Rekurzivní sestup | C | Smíšený | Všechno | Volný, uvolnit, MIT |
PEG.js | Packrat (částečná memoizace) | JavaScript | Smíšený | Všechno | Volný, uvolnit, MIT |
Pegas | Rekurzivní sestup, Packrat (selektivně) | C# | Smíšený | Okna | Volný, uvolnit, MIT |
pegc | Rekurzivní sestup | C | Smíšený | Všechno | Volný, uvolnit, veřejná doména |
škůdce | Rekurzivní sestup | Rez | Samostatný | Všechno | Volný, uvolnit, MPL |
PetitParser | Packrat | Pokec, Jáva, Šipka | Smíšený | Všechno | Volný, uvolnit, MIT |
PEGTL | Rekurzivní sestup | C ++ 11 | Smíšený | Všechno | Volný, uvolnit, MIT |
Analyzátor gramatiky (PGE) | Hybridní rekurzivní sestup / priorita operátora[7] | Bajtový kód papouška | Smíšený | Virtuální stroj papouška | Volný, uvolnit, Umělecký 2.0 |
PyPy rlib | Packrat | Krajta | Smíšený | Všechno | Volný, uvolnit, MIT |
Krysy! | Packrat | Jáva | Smíšený | Virtuální stroj Java | Volný, uvolnit, GNU LGPL |
Spirit2 | Rekurzivní sestup | C ++ | Smíšený | Všechno | Volný, uvolnit, Zvýšit |
Koruna stromu | Rekurzivní sestup | Rubín | Smíšený | Všechno | Volný, uvolnit, MIT |
Yard | Rekurzivní sestup | C ++ | Smíšený | Všechno | Volný, uvolnit, MIT nebo veřejná doména |
Waxeye | Parsovací stroj | C, Jáva, JavaScript, Krajta, Raketa, Rubín | Samostatný | Všechno | Volný, uvolnit, MIT |
PHP PEG | Analyzátor PEG? | PHP | Smíšený | Všechno | Volný, uvolnit, BSD |
Obecné bezkonjunktivní, konjunktivní nebo booleovské jazyky
Tato tabulka porovnává jazyky generátoru syntaktických analyzátorů s obecnými bezkontextová gramatika, a spojovací gramatika nebo booleovská gramatika.
název | Analýza algoritmus | Vstupní gramatická notace | Výstupní jazyky | Gramatika, kód | Lexer | Vývojová platforma | IDE | Licence |
---|---|---|---|---|---|---|---|---|
PŘÍZVUK | Earley | Yacc varianta | C | Smíšený | externí | Všechno | Ne | Volný, uvolnit, GNU GPL |
APaGeD | GLR, LALR (1), LL (k) | ? | D | Smíšený | generováno | Všechno | Ne | Volný, uvolnit, Umělecký |
Bison | LALR (1), LR (1), IELR (1), GLR | Yacc | C, C ++, Jáva, XML | Smíšené, kromě XML | externí | Všechno | Ne | Volný, uvolnit, GNU GPL |
Sada nástrojů pro reengineering softwaru DMS | GLR | ? | Parlanse | Smíšený | generováno | Okna | Ne | Proprietární |
DParser | GLR bez skeneru | ? | C | Smíšený | bez skeneru | POSIX | Ne | Volný, uvolnit, BSD |
Dypgen | Runtime-extensible GLR | ? | OCaml | Smíšený | generováno | Všechno | Ne | Volný, uvolnit, CeCILL -B |
E3 | Earley | ? | OCaml | Smíšený | externí nebo bez skeneru | Všechno | Ne | ? |
Elkhound | GLR | ? | C ++, OCaml | Smíšený | externí | Všechno | Ne | Volný, uvolnit, BSD |
GDK | LALR (1), GLR | ? | C, Lex, Haskell, HTML, Jáva, Objekt Pascal, Yacc | Smíšený | generováno | POSIX | Ne | Volný, uvolnit, MIT |
Šťastný | LALR, GLR | ? | Haskell | Smíšený | externí | Všechno | Ne | Volný, uvolnit, BSD |
Generátor analyzátoru Hime | GLR | ? | C#, Jáva, Rez | Samostatný | generováno | .NET Framework, Virtuální stroj Java | Ne | Volný, uvolnit, GNU LGPL |
Knihovna IronText | LALR (1), GLR | C# | C# | Smíšený | generované nebo externí | .NET Framework | Ne | Volný, uvolnit, Apache 2.0 |
Jison | LALR (1), LR (0), SLR (1) | Yacc | JavaScript, C#, PHP | Smíšený | generováno | Všechno | Ne | Volný, uvolnit, MIT |
Syntax | LALR (1), LR (0), SLR (1) CLR (1) LL (1) | JSON /Yacc | JavaScript, Krajta, PHP, Rubín, C#, Rez, Jáva | Smíšený | generováno | Všechno | Ne | Volný, uvolnit, MIT |
Laja | Bez skeneru, dvoufázové | Laja | Jáva | Samostatný | bez skeneru | Všechno | Ne | Volný, uvolnit, GNU GPL |
Model CC | Earley | Komentovaný model třídy | Jáva | Generováno | generováno | Všechno | Ne | Volný, uvolnit, BSD |
P3 | Earley - kombinátory | Jako BNF | OCaml | Smíšený | externí nebo bez skeneru | Všechno | Ne | ? |
P4 | Earley - kombinátory, nekonečné CFG | Jako BNF | OCaml | Smíšený | externí nebo bez skeneru | Všechno | Ne | ? |
Boolean Parser bez skenování | GLR bez skeneru (Booleovské gramatiky ) | ? | Haskell, Jáva | Samostatný | bez skeneru | Virtuální stroj Java | Ne | Volný, uvolnit, BSD |
SDF / SGLR | GLR bez skeneru | SDF | C, Jáva | Samostatný | bez skeneru | Všechno | Ano | Volný, uvolnit, BSD |
SmaCC | GLR (1), LALR (1), LR (1) | ? | Pokec | Smíšený | vnitřní | Všechno | Ano | Volný, uvolnit, MIT |
JISKRA | Earley | ? | Krajta | Smíšený | externí | Všechno | Ne | Volný, uvolnit, MIT |
Tom | GLR | ? | C | Generováno | žádný | Všechno | Ne | Zdarma, „Žádné licence ani omezení autorských práv“ |
UltraGram | LALR, LR, GLR | ? | C ++, C#, Jáva, Visual Basic .NET | Samostatný | generováno | Okna | Ano | Proprietární |
Červí díra | Prořezávání, LR, GLR, GLR bez skeneru | ? | C, Krajta | Smíšený | bez skeneru | Okna | Ne | Volný, uvolnit, MIT |
Velrybí mládě | Obecné tabulkové, SLL (k), Lineární normální forma (spojovací gramatiky ), LR, Binární normální forma (Booleovské gramatiky ) | ? | C ++ | Samostatný | externí | Všechno | Ne | Proprietární |
jo | Earley | Yacc -jako | C | Smíšený | externí | Všechno | Ne | Volný, uvolnit, GNU LGPL |
Kontextové gramatiky
Tato tabulka porovnává generátory syntaktických analyzátorů s kontextové gramatiky.
název | Algoritmus analýzy | Vstupní gramatická notace | Booleovské gramatické schopnosti | Vývojová platforma | Licence |
---|---|---|---|---|---|
LuZc[8][9] | delta řetěz | modulární | Spojovací, není bezplatné | POSIX | Proprietární |
bnf2xml | Rekurzivní sestup (je výstup textového filtru xml) | jednoduchý BNF[je zapotřebí objasnění ] gramatika (shoda vstupu), výstup je xml | ? | Beta, a ne úplný analyzátor EBNF | Volný, uvolnit, GNU GPL |
Viz také
Poznámky
- ^ Vidlice Bison 1,19
Reference
- ^ http://www.colm.net/open-source/ragel/
- ^ http://www.colm.net/open-source/ragel/[je nutné ověření ]
- ^ „Adaptivní analýza LL (*): síla dynamické analýzy“ (PDF). Terence Parr. Citováno 2016-04-03.
- ^ „Building parsers for the web with JavaCC & GWT (Part one)“. Chris Ainsley. Citováno 2014-05-04.
- ^ „Generátor analyzátoru SLK podporuje C, C ++, Java, JavaScript a C #, volitelně zpětné sledování, zdarma“.
- ^ http://www.slkpg.org/license.txt
- ^ „Parrot: Grammar Engine“. Nadace papouška. 2011.
Pravidla PGE poskytují plný výkon analýzy rekurzivního sestupu a analýzy priority operátora.
- ^ „LuZ: Kontextově citlivý analyzátor“. 2016-10-17. Archivovány od originál dne 2016-10-17. Citováno 2018-10-17.
- ^ „LuZc - konjunktivní kontextově citlivý analyzátor“. luzc.zohosites.com. Citováno 2018-10-17.