import edu.neu.ccs.demeter.dj.*; import java.util.*; AspectJFragment = List(PointCut) List(Advice) EOF. Advice = AdviceKind PCList(ArgDecl) ":" PCExp "{" "}" ";". AdviceKind : Before | After. Before = "before". After = "after". PointCut = "pointcut" PCName PCList(ArgDecl) ":" PCExp ";". PCExp : Simple | Compound. Simple : This | Target | Call | Args | PCRef. Compound : AndOrExp | NotExp | CFlow. CFlow = "cflow" "(" PCExp ")". NotExp = "!" PCExp. Op : AndOp | OrOp. OpPCExp = Op PCExp. AndOrExp = "(" PCExp List(OpPCExp) ")". AndOp = "&&". OrOp = "||". PCRef = "*" PCName PCList(Variable). This = "this" PVariable. Target = "target" PVariable. PVariable = "(" Variable ")". Call = "call" "(" Type FName "(..)" ")". Args = "args" PCList(Variable). ArgDecl = Type Variable. Variable = Ident. PCName = Ident. FName = Ident. Type = Ident. PCList(S) ~ "(" S { "," S } ")". List(S) ~ {S}. Main = String. CommandVisitor = extends Visitor.