Reprezentace programu
AST a Java
Vyhledávání v AST
Aplikace
Dotazování nad stromem abstraktní syntaxe Josef Smolka Fakulta jaderná a fyzikáln¥ inºenýrská eské vysoké u£ení technické v Praze
3.6.2010 Dotazování nad stromem abstraktní syntaxe
Josef Smolka
Reprezentace programu
AST a Java
Vyhledávání v AST
Aplikace
Osnova
while
1 2 3 4
Reprezentace programu AST a Java Vyhledávání v AST Aplikace
Dotazování nad stromem abstraktní syntaxe
body
expr
if
Josef Smolka
Reprezentace programu
AST a Java
Vyhledávání v AST
Aplikace
Jak reprezentovat program Pro£? • analýza,
Hello World
• transformace refaktorování;
Jak? • zdrojový kód, • strom abstraktní syntaxe, • abstraktní sémantický graf;
Dotazování nad stromem abstraktní syntaxe
Josef Smolka
Reprezentace programu
AST a Java
Vyhledávání v AST
Aplikace
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í;
Dotazování nad stromem abstraktní syntaxe
Josef Smolka
Reprezentace programu
AST a Java
Vyhledávání v AST
Aplikace
Reprezentace strom abstraktní syntaxe (AST) block decl vara
if 10 vara
Výhody • výstup kompilátoru,
== 10
then
else
print
print
str
vara
Nevýhody • ne v²echny souvislosti
• jasná struktura;
Dotazování nad stromem abstraktní syntaxe
Josef Smolka
Reprezentace programu
AST a Java
Vyhledávání v AST
Aplikace
Reprezentace abstraktní sémantický graf (ASG) block decl vara
if 10 vara
Nevýhody • náro£n¥j²í na sestavení
== 10
then
else
print
print
str
vara
Výhody • podgraf stále AST, • zachycuje i sémantickou
stránku;
Dotazování nad stromem abstraktní syntaxe
Josef Smolka
Reprezentace programu
AST a Java
Vyhledávání v AST
Aplikace
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;
Dotazování nad stromem abstraktní syntaxe
Josef Smolka
Reprezentace programu
AST a Java
Vyhledávání v AST
Aplikace
AST jazyka Java optimalizace P°íklad +
int a = 1 + 2 + 3 + 4; +
1
+
2 3
+
4 1
2
other 3
Dotazování nad stromem abstraktní syntaxe
4
Josef Smolka
Reprezentace programu
AST a Java
Vyhledávání v AST
Aplikace
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;
Dotazování nad stromem abstraktní syntaxe
Josef Smolka
Reprezentace programu
AST a Java
Vyhledávání v AST
Aplikace
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;
Dotazování nad stromem abstraktní syntaxe
Josef Smolka
Reprezentace programu
AST a Java
Vyhledávání v AST
Aplikace
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;
Dotazování nad stromem abstraktní syntaxe
Josef Smolka
Reprezentace programu
AST a Java
Vyhledávání v AST
Aplikace
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
Dotazování nad stromem abstraktní syntaxe
Josef Smolka
Reprezentace programu
AST a Java
Vyhledávání v AST
Aplikace
XPath PMD P°íklad //ClassOrInterfaceBodyDeclaration[ count( //VariableDeclarator[ ../Type/ReferenceType/ ClassOrInterfaceType[@Image='Logger'] ] ) > 1 ]
Dotazování nad stromem abstraktní syntaxe
Josef Smolka
Reprezentace programu
AST a Java
Vyhledávání v AST
Aplikace
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
Dotazování nad stromem abstraktní syntaxe
Josef Smolka
Reprezentace programu
AST a Java
Vyhledávání v AST
Aplikace
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
Dotazování nad stromem abstraktní syntaxe
Josef Smolka
Reprezentace programu
AST a Java
Vyhledávání v AST
Aplikace
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) Dotazování nad stromem abstraktní syntaxe
Josef Smolka
Reprezentace programu
AST a Java
Vyhledávání v AST
Aplikace
Dotazy
Dotazování nad stromem abstraktní syntaxe
Josef Smolka