import edu.neu.ccs.demeter.dj.*; Main = String. Aspect = "aspect" TraversalAspectName SList(Decl) EOF. Decl = "declare" Item ";". Item : NamedStrat | Trav. NamedStrat = "strategy" ":" StrategyName ":" Strat. Trav = "traversal" ":" MethodSignature ":" StrategyName "(" ClassName ")". MethodSignature = "void" MethodName "(" [ CList(FormalArgument)] ")". FormalArgument = ClassName VariableName. CList(S) ~ S {"," S}. TraversalAspectName = Ident. StrategyName = Ident. ClassName = Ident. MethodName = Ident. Strat = String. VariableName = Ident. SList(S) ~ "{" { S } "}". // SList(S) ~ "{" S {";" S } "}".