// Programs Program = "{" prog L(AdaptiveMethod) "}" EOF. AdaptiveMethod = "{" "prog" CD OG Strategy Visitor "}" . // Class Graphs: CD = PL(DD). DD = "(datatype" TypeName L(Alternative) ")". Alternative = "(" AlternativeName L(TypedField) ")". TypedField = "(" FieldName TypeName ")". FieldName = Ident. TypeName = Ident. AlternativeName = Ident. // Object Graphs: OG : Numerical | Textual | ConstrCall. Numerical = Number. Textual = String. ConstrCall = "(" AlternativeName L(OG) ")". // Strategies: Strategy : SimpleStrategy | CompoundStrategy. SimpleStrategy = "(from-to" TypeName TypeName ")". CompoundStrategy = "(" SOp Strategy Strategy ")". SOp : Join | Merge. Join = "join". Merge = "merge". // Visitors: Visitor = "(visitor" VisName Expression FinishAction L(Action) ")". FinishAction = Expression. Action : Before | After common "(" VarName TypeName ")" Expression. Before = "before". After = "after". Expression : Simple | Compound | Fetch | Get | Set. // Simple : VisName | Numerical2 | VarName. Simple : Numerical2 | VarName. Compound = "(" Op L(Expression) ")". Op : Add | Mul | Sub . Add = "+". Mul = "*". Sub = "-". Fetch = "(fetch" Strategy Expression ")". Get = "(get" VarName FieldName ")". Set = "(set!" VarName FieldName Expression ")". VisName = Ident. VarName = Ident. Numerical2 = Number. L(S) ~ {S}. PL(S) ~ "(" {S} ")". Main = String.