DAJ = List(TraversalAspect). TraversalAspect = "aspect" AspectName CurlyList(Definition). Definition = "declare" DefinitionBody ";". DefinitionBody : CG | Strategy | AdaptiveMethod. CG = "ClassGraph" ClassGraphName. Strategy = "Strategy" StrategyName "=" StrategyExpression. StrategyExpression : Simple | Compound. Simple : StrategyName | StrategyString. StrategyString = String. Compound = "(" Op List(StrategyExpression) ")". Op : And. And = "&&". AdaptiveMethod = "Method" MethodSignature MethodBody. MethodSignature = List(MethodKeyword) JavaType MethodName "(" [ Commalist(MethodParm) ] ")" Throws. MethodKeyword : PublicMethod | ProtectedMethod | PrivateMethod | StaticMethod | FinalMethod . PublicMethod = "public". ProtectedMethod = "protected". PrivateMethod = "private". StaticMethod = "static". FinalMethod = "final". MethodParm = JavaType ParmName List(ArraySpec). Throws = [ *s "throws" Commalist(ClassName) ]. MethodBody = StrategyExpression VisitorRef. VisitorRef = "(" Commalist(ClassName) ")" . JavaType = Name List(ArraySpec). ArraySpec = "[" "]". Name ~ Ident { "." Ident }. ClassGraphName = Ident. StrategyName = Ident. MethodName = Ident. ClassName = Name. ParmName = Ident. AspectName = Name. List(S) ~ {*s S}. NList(S) ~ S {*s S}. CurlyList(S) ~ "{" S {*s S} "}". Commalist(S) ~ S {"," *s S}. Main = String.