Fakulta jaderná a fyzikáln inºenýrská ƒeské vysoké u ení technické v Praze 3.6.2010
Osnova while 1 Reprezentace programu 2 AST a Java 3 Vyhledávání v AST 4 Aplikace body if expr
Jak reprezentovat program Pro? Hello World Jak? analýza, transformace refaktorování; zdrojový kód, strom abstraktní syntaxe, abstraktní sémantický graf;
Reprezentace zdrojový kód P íklad vara = 10 if vara == 10 then print "Hello World" else print vara Výhody dostupnost, vyhledávání textových informací; Nevýhody zbyte né informace, hledání souvislostí;
Reprezentace strom abstraktní syntaxe (AST) block decl if vara 10 == then else vara 10 print str print vara Výhody výstup kompilátoru, jasná struktura; Nevýhody ne v²echny souvislosti
Reprezentace abstraktní sémantický graf (ASG) block decl if vara 10 == then else vara 10 print str print vara Nevýhody náro n j²í na sestavení Výhody podgraf stále AST, zachycuje i sémantickou stránku;
AST jazyka Java Vlastnosti p es 100 druh uzl (26 druh výraz, 22 p íkaz a dal²í), rozsáhlý (i pro malé kompila ní jednotky); Vytvo ení chybí standardní nástroj, Eclipse JDT - ASTParser (JLS 2 i 3), ANTLR + p íslu²ná gramatika;
AST jazyka Java optimalizace P íklad + int a = 1 + 2 + 3 + 4; 1 + 2 + 3 4 + 1 2 other 3 4
Vyhledávání v AST R zné p ístupy ru ní prohledávání do ²í ky/hloubky, návrhový vzor náv²t vník, specializované nástroje; Nástroje XML XPath, XML XQuery;
Návrhový vzor náv²t vník JDT Java Development Tools AST DOM, ASTNode.accept() ASTVisitor.visit() pro kaºdý typ uzlu; Výhody/nevýhody základní dotazy jednoduché na implementaci, pro kaºdý typ dotazu novou implementaci ASTVisitor;
XML nástroje Moºnosti XPath XML Path Language, XQuery XML Query Language, XSLT extensible Stylesheet Language Transformations; Problémy AST XML, implementovat DOM nad AST p evod AST DOM, dotazování transformace;
P evod AST XML DOM e²ení JRefLib knihovna v Jav p evod AST z JDT do XML DOMu zachovává vazbu na p vodní syntaktický strom Problémy mapování AST: p es 100 druh uzl XML DOM: elementy, atributy
XPath PMD P íklad //ClassOrInterfaceBodyDeclaration[ count( //VariableDeclarator[../Type/ReferenceType/ ClassOrInterfaceType[@Image='Logger'] ] ) > 1 ]
XQuery JRefactor XQuery funkcionální dotazovací jazyk pro XML nadmnoºina XPath Výhody/nevýhody adresování element pomocí XPath podoba s SQL nemá update, delete
XQuery a AST ukázka P íklad for $type in.//type let $methods := $type/methods/method[name=$methodname] where $type/name = $typename return if (count($methods) = 1) then $methods[1] else for $m in $methods where $m/@signature = $methodsignature return $m
Aplikace a dal²í rozvoj Vytvo ené knihovny a nástroje JRefLib knihovna pro p evod AST do XML DOM JRefactor prototyp refaktorovacího nástroje vyuºívající XQuery SrcToXML, RunXQ malé aplikace pro testování skript XQuery Dal²í rozvoj XQuery také transformace (update, delete) AST standard pro p evod do XML (zatím pokusy OMG)
Dotazy