Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 Expressiveness and Complexity of Crosscut Languages Karl Lieberherr, Jeffrey Palm and Ravi Sundaram Northeastern University FOAL 2005 presentation.

Similar presentations


Presentation on theme: "1 Expressiveness and Complexity of Crosscut Languages Karl Lieberherr, Jeffrey Palm and Ravi Sundaram Northeastern University FOAL 2005 presentation."— Presentation transcript:

1 1 Expressiveness and Complexity of Crosscut Languages Karl Lieberherr, Jeffrey Palm and Ravi Sundaram Northeastern University FOAL 2005 presentation

2 2 Goal Crosscut Languages are important in AOP Study them abstractly using expressions on graphs: lower bounds and upper bounds Assumption: know entire program or class graph Of interest to: AOSD language designers and tool builders and mathematicians.

3 3 Regular Expressions on Graphs Questions: Given G and reg. exp. r: –Is there a path in G satisfying r? (SAT) –Do all paths in G that satisfy r contain n in G? (ALWAYS) –Is there a path in G that starts with e and satisfies r? (FIRST) Questions: Given G and reg. exps r1 and r2: –Is the set of paths in G satisfying r1 a subset of the set of paths satisfying r2? (IMPL) What has this to do with AOSD? ALL PROBLEMS ARE POLYNOMIAL Generalizes regular expressions on strings: sentences must be node paths in graphs. Work by Tarjan and Mendelzon.

4 4 Enhanced Regular Expressions ERE = regular expressions (primitive, concatenation, union, star) with –complement/negation –nodes and edges

5 5 Canonical Crosscut Language Enhanced Regular Expressions AspectJ Pointcuts Traversal Strategies subset of XPath

6 6 Some PARC-Northeastern History about Crosscut Languages: Enhanced Regular Expressions (ERE) >From Thu Aug 31 13:33: >To (cc to Gregor, Crista and Jens Palsberg et al.) Subject: Re: Boolean and Regular We seem to be converging, but I still think that enhanced regular expressions can express all of the operators. Here is the enhanced regular expression language from a while back: Atomic expressions: A The empty traversal at class A lnk A link of type lnk ("any" is a special case of any link type) For combining expressions, the usual regular expression crowd:. concatenation \cap intersection \cup union * repetition not negation

7 7 Same message continued: Demeter in ERE [A,B] A.any*.B through edges any*.lnk.any* bypassing edges not(any*.lnk.any*) through vertices any*.A.any* bypassing vertices not(any*.A.any*) d1 join d2 [d1].[d2] d1 merge d2 [d1] \cup [d2] d1 intersect d2 [d1] \cap [d2] not d1 not([d1])

8 8 Enhanced Regular Expressions on Graphs Questions: Given G and reg. exp. r: –Is there a path in G satisfying r? (SAT) –Do all paths in G that satisfy r contain n in G? (ALWAYS) –Is there a path in G that starts with e and satisfies r? (FIRST) Questions: Given G and reg. exps. r1 and r2: –Is the set of paths in G satisfying r1 a subset of the set of paths satisfying r2? (IMPL) Ok, related to Demeter but how does AspectJ come in? ALL PROBLEMS BECOME NP-COMPLETE

9 9 Mathematics for AOP stringgraph/ instance tree class graph/ instance tree reg. exp. KleeneMendelzon (SIAM Comp. 95, no instance trees) Palsberg/Xiao/ Lieberherr (TOPLAS 95) e. reg. exp KleenePARC/Northeastern (summer 95) Palsberg/Patt-Shamir/ Lieberherr (96) Palm/Sundaram/ Lieberherr (04) strategy graph ?Patt-Shamir/ Orleans/Lieberherr (97,05) Wand/Lieberherr (01)

10 10 SAT: is there a path in G satisfying r? graph G/ instance tree class graph G/ instance tree reg. exp. r Mendelzon (SIAM J. Comp. 95, no instance trees): polynomial Palsberg/Xiao/ Lieberherr (TOPLAS 95): polynomial (special case) e. reg. exp r PARC/Northeastern (summer 95) Palm/Sundaram/ Lieberherr (04): NP-complete strategy graph r Patt-Shamir/ Orleans/Lieberherr (97,05): polynomial

11 11 SAT: is there a path in G satisfying r? graph G/ instance tree class graph G/ instance tree reg. exp. r Mendelzon (SIAM J. Comp. 95, no instance trees): polynomial Palsberg/Xiao/ Lieberherr (TOPLAS 95): polynomial (special case) e. reg. exp r PARC/Northeastern (summer 95) Palm/Sundaram/ Lieberherr (04): NP-complete strategy graph r Patt-Shamir/ Orleans/Lieberherr (97,05): polynomial

12 12 SAT: is there a path in G satisfying r? graph G reg. exp.poly. e. reg. exp.NPC (add negation) strat. graphpoly. e. strat. graphNPC (add intersection/negation) SAJ (AspectJ)NPC SD (Demeter)NPC SAJ-basepoly. (without intersection) SD-basepoly. (without intersection) results identical for class graphs

13 13 Abbreviations LanguageAbbreviation regular exp.RE enhanced regular exp.ERE strategy graphSG enhanced strategy graphESG SAJ (AspectJ)SAJ SD (Demeter)SD SAJ-baseSAJB SD-baseSDB

14 14 Polynomial Translations REERESGESGSAJSDSAJBSDB RE YYYNN ERE NN SG Y ESG NN SAJ YYYNN SD YYYNN SAJB YYYY SDB YYYNN translate row to column N: no, unless P=NP; NN: no

15 15

16 16 My response From lieber Thu Aug 31 13:51: From: Karl Lieberherr To: Subject: Re: Boolean and Regular Cc: Hi John: yes, we agree. The operators of what I called Boolean algebra operators are just as well counted as regular expression operators. I like your integration; have to think more about how expressive it is. -- Karl CLAIM: ERE are the foundation for crosscut languages

17 17 Using ERE for AspectJ AspectJ k (a primitive) cflow(k) && || ! ERE main any* k main any* k any* \cap \cup !

18 18 We continue the study of crosscut languages and show that AspectJ pointcuts are equivalent to Demeter strategies and vice versa if you abstract from the unimportant details. we show the correspondence by direct translations in both directions.

19 19 Examples first Show two programs and their graph abstractions

20 20 class Example { // AspectJ program public static void main(String[] s) {x1(); nx1();} static void x1() { x2(); nx2(); } static void x2() { x3(); nx3(); } static void x3() { target(); } static void nx1() { x2(); nx2(); } static void nx2() { x3(); nx3(); } static void nx3() { target(); } static void target() {} } aspect Aspect { pointcut p1(): cflow(call (void x1())) || cflow(call (void nx2())) || cflow(call (void x3())); pointcut p2() : cflow(call (void nx1())) || cflow(call (void x2())); pointcut p3() : cflow(call (void x1())); pointcut p4() : cflow(call (void nx3())); pointcut all(): p1() && p2() && p3() && p4(); before(): all() && !within(Aspect) { System.out.println(thisJoinPoint); } x1 main nx1 x2nx2 x3 nx3 target main x1 x2 x3 target nx3 target … Meta graph= Call graph Instance tree Call tree Selected by all()

21 21 class Main { // Java Program with DJ X1 x1; Nx1 nx1; public static void main(String[] s) { ClassGraph cg = new ClassGraph(); Main m = new Main(); cg.traverse(m, // m is the complete tree with 8 leaves "intersect(" + // union is expressed by concatenation of edges "{source: Main -> X1 X1 -> target: Target " + "source: Main ->Nx2 Nx2 -> target: Target " + "Main -> X3 X3 -> Target}," + "{source: Main -> Nx1 Nx1 -> target: Target " + "Main -> X2 X2 -> Target}," + "{source:Main -> X1 X1 -> target: Target}," + "{source:Main -> Nx3 Nx3 -> target: Target})", new Visitor(){ public void start (){System.out.println(" start traversal");} public void finish (){System.out.println(" finish traversal");} void before (Target host){System.out.print(host + ' ');} void before (Nx3 host) {System.out.print(host + ' ');} void before (X2 host) {System.out.print(host + ' ');} void before (X1 host) {System.out.print(host + ' ');} });} } class X1 { X2 x2; Nx2 nx2; } class Nx1 { X2 x2; Nx2 nx2; } class X2 { X3 x3; Nx3 nx3; } class Nx2 { X3 x3; Nx3 nx3; } class X3 { Target t; } class Nx3 { Target t; } class Target {} X1 Main Nx1 X2Nx2 X3 Nx3 Target Main X1 X2 X3 Target Nx3 Target … Meta graph= Class graph Instance tree Object tree Selected by strategy

22 22 Crosscut Language SAJ S ::= a set of nodes k | set of nodes having label k flow(S) | set of nodes reachable from S S | S | union S & S | intersection !S complement base language

23 23 Crosscut language SD D ::= a set of paths [A,B] | paths from A to B D. D | concatenation of paths D | D | union of paths D & D | intersection of paths !D complement of paths base language

24 24 Instance Tree J is called an instance tree of graph G, if J is a tree, Root(J)=Start(G) and for each edge e=(u,v) in E(J), there is an edge e’ = (u’, v’) in G so that Label(u)=Label(u’) and Label(v)=Label(v’). J is a rooted tree with edges directed away from the root. (think of Label = Class)

25 25 Expressions on Graphs Expressions on Instances Questions: Given graph G and r: Exists J sat G: –Is there a path in J satisfying r? –For a given node m in G: Do all paths in J that satisfy r contain a node n in J with Label(n) = m? –Is there a path in J that starts with e and satisfies r? Questions: Given G and r1 and r2: Exists J sat G: –Is the set of paths in J satisfying r1 a subset of the set of paths satisfying r2? push down to instances

26 26 Expressions on instances Questions: Given graph G, r and instance J satisfying G: –Determine the set of edges e from Root(J) so that there is a path in J starting with e and satisfying r?

27 27 Connections between SAJ and SD SAJ selects set of nodes in tree (but there is a unique path from root to each node) set expression flavor SD selects set of paths in tree regular expression flavor

28 28 Equivalence of node sets and path sets In a rooted tree, such as an instance tree, there is a one-to-one correspondence between nodes, and, paths from the root, because there is a unique path from the root to each node. We say a set of paths P is equivalent to a set of nodes N if for each n in N there is a path p in P that starts at the root and ends at n and similarly for each p in P it is the case that p starts at the root and ends in a node n in N.

29 29 Theorem 1 A selector expression in SD (SAJ) can be transformed into an expression in SAJ (SD) in polynomial-time, such that for all meta graphs and instance trees the set of paths (nodes) selected by the SD (SAJ) selector is equivalent to the set of nodes (paths) selected by the SAJ (SD) selector.

30 30 class Example { // AspectJ program public static void main(String[] s) {x1(); nx1();} static void x1() {if (false) x2(); nx2(); } static void x2() { if (false) x3(); nx3(); } static void x3() { if (false) target(); } static void nx1() {if (false) x2(); nx2(); } static void nx2() {if (false) x3(); nx3(); } static void nx3() {if (false) target(); } static void target() {} } aspect Aspect { pointcut p1(): cflow(call (void x1())) || cflow(call (void nx2())) || cflow(call (void x3())); pointcut p2() : cflow(call (void nx1())) || cflow(call (void x2())); pointcut p3() : cflow(call (void x1())); pointcut p4() : cflow(call (void nx3())); pointcut all(): p1() && p2() && p3() && p4(); before(): all() && !within(Aspect) { System.out.println(thisJoinPoint); } x1 main nx1 x2nx2 x3 nx3 target main x1 x2 x3 target nx3 target … Meta graph Instance tree Selected by all() APPROXIMATION

31 31 Computational Properties Select-Sat: Given a selector p and a meta graph G, is there an instance tree for G for which p selects a non-empty set of nodes. X/Y/Z –X is a problem, e.g., Select-Sat –Z is a language, e.g. SAJ or SD –Y is one of -,&,! representing a version of Z. X/-/Z base language of Z. X/&/Z is base language of Z plus intersection. X/!/Z is base language of Z plus negation.

32 32 Approximation and Computational Properties Not Select-Sat: Given a selector p and a meta graph G, for all instance trees for G selector p selects an empty set of nodes, i.e. p is useless. If Not Select-Sat(p,G)/*/SAJ holds then also for the original Java program the selector p (pointcut) is useless.

33 33 Same results for 5 problems We don’t know yet how to unify all the proofs. So we prove the results separately.

34 34 Results (Problem) ProblemSDSAJ -PP &NP-complete !

35 35 Results (Problem) Results(Select-Sat) Results(Not Select-Impl) Results(Select-First) Results(Not Select-Always) Results(Not Select-Never)

36 36 Select-Sat Select-Sat/&/SAJ is NP-complete This is unexpected because we have only primitive pointcuts (e.g., call), cflow, union and intersection. Looks like Satisfiability of a monotone Boolean expression which is polynomial.

37 37 Combining SAJ and SD Extend SD with [A,*]: all nodes reachable from A Replace in SAJ: flow(S) by nodes(D) Can simulate flow(S): use [X,*] for each X in S and take the union.

38 38 Crosscut Language SAJ/SD S ::= a set of nodes n(l) | set of nodes having label l nodes(D) | set of nodes selected by D S | S | union S & S | intersection !S complement

39 39 Crosscut language SD D ::= a set of paths [A,B] | paths from A to B D. D | concatenation of paths D | D | union of paths D & D | intersection of paths !D complement of paths


Download ppt "1 Expressiveness and Complexity of Crosscut Languages Karl Lieberherr, Jeffrey Palm and Ravi Sundaram Northeastern University FOAL 2005 presentation."

Similar presentations


Ads by Google