package gen; import edu.neu.ccs.demeterf.lib.*; import edu.neu.ccs.demeterf.*; nogen List(X) = Cons(X) | Empty(X). nogen Cons(X) = X List(X). nogen Empty(X) = . nogen Option(X)= Some(X) | None(X). nogen Some(X) = X. nogen None(X) = . // Class graph: // DOMAIN DEFINITION Domain =

Instance Solution ValidPredicate QualityFunction. Instance = ClassDictionary. // 1.class = defines Instance-language // the 1. class must define InstanceId. Solution = ClassDictionary. // 1.class = defines Solution-language // the 1.class must define InstanceId. ValidPredicate = ValidBody. // is Solution s valid for Instance i? // uses two parameters: Instance i and Solution s QualityFunction = QualityBody. // what is the quality of Solution s for Instance i // uses two paramaters: Instance i and Solution s // CLAIM SET DEFINITION Claim = Domain ClassDictionary InstancePredicate ProtocolDefinition. // 1.class = defines Claim-language // the cd must define Quality Resource. // defines claim parameter // defines optional confidence (currently not used) InstancePredicate = PredicateBody. // does Instance i belong to Claim c? // uses two parameters: Claim c and Instance i ValidBody = JavaCode. QualityBody = JavaCode. PredicateBody = JavaCode. // Quality = Double. // Resource = Double. InstanceId = ident. InstanceStructure = . SolutionStructure = . ClassDictionary = verbatim. // defined at meta level // used at playground level to define protocol // constrains scholars at scholar level ProtocolTest = List(ProtocolDefinition) EOF. ProtocolDefinition = "protocol" ProtocolName Option(ClaimSetName) "variables" List(VariableDeclaration) List(ProtocolStep) "predicate" Predicate. ProtocolStep = "step" StepName ScholarName List(VariableBinding). VariableBinding = SecretBinding | RegularBinding VariableName. VariableDeclaration = VariableType VariableName. Predicate = List(VariableName) JavaCode. SecretBinding = "secret" "until" StepName. RegularBinding = . // Terminal Buffer Rule ProtocolName = ident. StepName = ident. VariableName = ident. VariableType = ident. JavaCode = verbatim. ScholarName = ident. ClaimSetName = "claim" "set" "name" ident.