Title: Expressiveness and Complexity of Crosscut Languages
1Expressiveness and Complexity of Crosscut
Languages
- Karl Lieberherr, Jeffrey Palm and Ravi Sundaram
- Northeastern University
- FOAL 2005 presentation
2Goal
- 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.
3Regular Expressions on Graphs
ALL PROBLEMS ARE POLYNOMIAL
- 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?
Generalizes regular expressions on
strings sentences must be node paths in graphs.
Work by Tarjan and Mendelzon.
4Enhanced Regular Expressions
- ERE regular expressions (primitive,
concatenation, union, star) with - complement/negation
- nodes and edges
5Canonical Crosscut Language
6Some PARC-Northeastern History about Crosscut
LanguagesEnhanced Regular Expressions (ERE)
- gtFrom lamping_at_parc.xerox.com Thu Aug 31 133357
1995 - gtTo lieber_at_ccs.neu.edu
- (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
7Same message continuedDemeter 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)
8Enhanced Regular Expressions on Graphs
ALL PROBLEMS BECOME NP-COMPLETE
- 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?
9Mathematics for AOP
10SAT is there a path in G satisfying r?
11SAT is there a path in G satisfying r?
12SAT is there a path in G satisfying r?
results identical for class graphs
13Abbreviations
14Polynomial Translations
N no, unless PNP NN no
translate row to column
15(No Transcript)
16My response
- From lieber Thu Aug 31 135157 1995
- From Karl Lieberherr ltliebergt
- To lamping_at_parc.xerox.com, lieber_at_ccs.neu.edu
- Subject Re Boolean and Regular
- Cc Gregor_at_parc.xerox.com, boaz_at_ccs.neu.edu,
crista_at_ccs.neu.edu, - huersch_at_ccs.neu.edu, ivbaev_at_ccs.neu.edu,
palsberg_at_theory.lcs.mit.edu, - salil_at_ccs.neu.edu, seiter_at_ccs.neu.edu,
yangl_at_ccs.neu.edu - 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
17Using ERE for AspectJ
- AspectJ
- k (a primitive)
- cflow(k)
-
-
- !
- ERE
- main any k
- main any k any
- \cap
- \cup
- !
18We 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.
19Examples first
- Show two programs and their graph abstractions
20class 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(thisJoinPo
int)
Meta graph Call graph
main
nx1
x1
x2
nx2
x3
nx3
main x1 x2 x3 target
nx3 target
target
Instance tree Call tree
Selected by all()
21class 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 -gt X1 X1 -gt target Target "
"source Main -gtNx2 Nx2 -gt target Target "
"Main -gt X3 X3 -gt Target,"
"source Main -gt Nx1 Nx1 -gt target Target "
"Main -gt X2 X2 -gt Target,"
"sourceMain -gt X1 X1 -gt target Target,"
"sourceMain -gt Nx3 Nx3 -gt 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
Meta graph Class graph
Main
Nx1
X1
X2
Nx2
X3
Nx3
Main X1 X2 X3 Target
Nx3 Target
Target
Instance tree Object tree
Selected by strategy
22Crosscut 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
23Crosscut 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
24Instance 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)
25Expressions on GraphsExpressions 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
26Expressions 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?
27Connections 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
28Equivalence 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.
29Theorem 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.
30class 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)
Meta graph
main
nx1
x1
x2
nx2
x3
nx3
main x1 x2 x3 target
nx3 target
target
Instance tree
Selected by all()
APPROXIMATION
31Computational 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.
32Approximation 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.
33Same results for 5 problems
- We dont know yet how to unify all the proofs.
- So we prove the results separately.
34Results (Problem)
35Results (Problem)
- Results(Select-Sat)
- Results(Not Select-Impl)
- Results(Select-First)
- Results(Not Select-Always)
- Results(Not Select-Never)
36Select-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.
37Combining 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.
38Crosscut 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
39Crosscut 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