JavaCC: Porovnání verzí

Z FI WIKI
Přejít na: navigace, hledání
 
 
Řádka 47: Řádka 47:
  
 
Když se náš parser začne chovat jinak, než očekáváme, zajisté oceníme možnosti laďění programů, jež nám JavaCC nabízí. Při ladění nám JavaCC přesně hlásí, co a jak provádí, a většinou není problém během poměrně krátké doby zjistit, kde jsme udělali chybu.
 
Když se náš parser začne chovat jinak, než očekáváme, zajisté oceníme možnosti laďění programů, jež nám JavaCC nabízí. Při ladění nám JavaCC přesně hlásí, co a jak provádí, a většinou není problém během poměrně krátké doby zjistit, kde jsme udělali chybu.
 +
 +
[[Kategorie:Java]]
 +
[[Kategorie:Java SE]]

Aktuální verze z 28. 9. 2006, 00:50

JavaCC

Co to je JavaCC

Zkratka JavaCC znamená Java Compiler Compiler. Jedná se o program, který dovede vytvářet parsery, jež je poté možno používat javovými aplikacemi. JavaCC funguje tak, že soubor s popisem gramatiky, který vytvoříme, převede na běžný zdrojový soubor v jazyce Java. Takovýto zdrojový soubor potom můžeme přeložit běžným překladačem pro Javu a získáme tak spustitelný javový program, který dokáže rozhodnout o tom, zda vstupní text odpovídá námi specifikované gramatice, či nikoli.

Vlastnosti JavaCC

JavaCC je kompletně napsán v programovacím jazyce Java. Soubory, které generuje, jsou také čisté javové soubory, z čehož plyne jeho velká výhoda a sice, že ho můžeme používat na jakémkoli operačním systému. Stejně tak jsou přenositelné jím vygenerované programy. Program JavaCC můžeme získat z jeho domovských stránek http://javacc.dev.java.net/. Pro JavaCC existuje již celá řada vytvořených gramatik. Některé gramatiky lze nalézt přímo na domovských stránkách programu JavaCC http://javacc.dev.java.net/servlets/ProjectDocumentList?folderID=110

Lexikální specifikace a specifikace gramatiky jsou uloženy v jednom souboru. Takže je gramatiku poměrně jednoduché číst a upravovat.

Dále JavaCC obsahuje program JJTree, který je schopen ze vstupního textu odpovídajícího dané gramatice vytvořit strom.

Další nástroj, který je součástí JavaCC, je takzvaný JJDoc, což je program, který je schopen ze souboru s gramatikou vygenerovat zápis gramatiky v běžném zápisu BNF.

JavaCC dokáže zpracovat vstup ve formátu Unicode. Protože lexikální specifikace může také obsahovat znaky v Unicodu, lze pomocí JavaCC specifikovat například identifikátory v Javě, které se nemusí skládat jen ze znaků ASCII.

Implicitně JavaCC vytváří LL(1) gramatiky. JavaCC nám však dovoluje vytvářet i gramatiky, jež jsou LL(k). LL(k) gramatiky však mohou výrazně zpomalit zpracování vstupního souboru. Proto nám JavaCC dovoluje definovat část gramatiky jako LL(k) a celý zbytek gramatiky jako LL(1). Tím můžeme docílit jednoduchého zápisu gramatiky bez výrazného zpomalení parseru.

JavaCC má většinou srozumitelné chybové hlášení. Pokud ale vytváříme soubor s gramatikou, který potom pomocí programu JavaCC převádíme na javový zdrojový soubor, a ten dále kompilujeme překladačem Javy, jsou chybová hlášení překladače Javy poněkud nejasná. Překladač totiž poukazuje na řádky ve vygenerovaném javovém souboru a není možné snadno zjistit problematické místo v našem souboru s gramatikou.

JavaCC je v současnosti asi nejpoužívanější nástroj tohoto typu, jenž se používá s javovými aplikacemi. Z toho plyne široká základna uživatelů a obsáhlý katalog emailů, který nalezneme na adrese https://javacc.dev.java.net/doc/mailinglist.html

JavaCC je naprogramován celý v programovacím jazyce Java. Lze ho tedy používat na mnoha různých platformách, stejně jako jím vygenerované parsery.

V lexikální specifikaci a i ve specifikaci gramatiky nám JavaCC umožňuje používat zápis ve tvaru EBNF (Niklaus Wirth’s Extended Backus-Naur Form). EBNF nám například umožňuje zápis ve tvaru y(x)*, který je zpravidla lépe čitelný nežli zápis v BNF. Ten by v našem případě vypadal například A ::= Ax|y.

Když se náš parser začne chovat jinak, než očekáváme, zajisté oceníme možnosti laďění programů, jež nám JavaCC nabízí. Při ladění nám JavaCC přesně hlásí, co a jak provádí, a většinou není problém během poměrně krátké doby zjistit, kde jsme udělali chybu.