// Copyright wsper.org 2009 // Author Jean-Jacques Dubray // License: CreativeCommons Attribution-ShareAlike 3.0 Unported // Please read this license before using this DSL: // http://creativecommons.org/licenses/by-sa/3.0/legalcode Model: (variables+=Variable)* (activities+=Activity)* (operations+=Operation)* (states+=State)* (transitions+=Transition)* ; State: SimpleState | CompositeState | OrthogonalState | SubmachineState ; SimpleState: "state" name=ID "{" ("preaction" preActions+=[Activity] ";")* ("postaction" postActions+=[Activity] ";")* "}" ; CompositeState: "composite" name=ID "{" (variables+=Variable)* (activities+=Activity)* (operations+=Operation)* (states+=State)* (transitions+=Transition)* "}" ; OrthogonalState: "orthogonal" name = ID "{" state1 = CompositeState state2 = CompositeState "}" ; SubmachineState: "submachine" name=ID url=URI ; Transition: "from" fromState=[State] "to" toState=[State] (guard=ConditionExpression) "{" (activities+=[Activity])* (operations+=[Operation])* "}" ; Activity: "activity" name=ID ";" ; Operation: "operation" name=ID ";" ; Variable: ("variable" name=ID ";"); Enum LogicalOperator: Equal = "==" | NotEqual = "!=" | GreaterThan = ">" | LessThan = "<" | GreaterThanOrEqual = ">=" | LessThanOrEqual="<="; Enum AlgebraicOperator: Multiply = "*" | Add="+" | Subtract="-" | Divide = "/" ; ConditionExpression: IsNot "(" [Variable] LogicalOperator Expression ")" ; IsNot: (isNot?="!")? ; Expression: [Variable] | Number | Double | CompositeExpression ; CompositeExpression: ("("Expression AlgebraicOperator Expression")"); Number: number=INT ; Double: i=INT"."d=INT;