grammar robots.missions.TaskDSL with org.eclipse.xtext.common.Terminals generate taskDSL "http://www.missions.robots/TaskDSL" Robot: 'Acceleration' acc=INT 'Speed' spd=INT behaviour+=Behaviour+ mission+=Mission+; Mission: 'Mission' name=ID 'using' behaviours+=[Behaviour]+ 'and stops when' se=StoppingExpression; StoppingExpression: '(' op=Operator s+=StoppingExpression s+=StoppingExpression+ ')' | 'not ' negscond=StoppingExpression | scond=StoppingCondition; StoppingCondition: 'flag set' varName=ID | 'Touched on' touch=LeftRight | 'Light on' light=LeftRight | 'Distance dangerous at ' dist=BackFront | 'Color is' color=Color | {StoppingCondition} 'Never'; Behaviour: 'Behaviour' name=ID 'take control:' tc=StoppingExpression? 'action:' actions+=Action+ ; Action: whichMotor=LeftRight 'motor' moveDir=Direction ('with speed' spd=INT 'acceleration' acc=INT)? | 'turn' turnType=Turn ('with speed' spd=INT 'acceleration' acc=INT)? | 'measure' rl=RockLake| 'wait' time=Time | 'set flag' varName=ID; Turn: turnDir=LeftRight 'exactly' degrees=INT 'degrees'| 'randomly' start=INT 'to' end=INT 'degrees' ; Time: time=INT 'ms' | {Time} 'forever'; RockLake: d=RockLakeE; enum RockLakeE: ROCK='Rock' | LAKE='Lake'; Direction: d=DirectionE; enum DirectionE: BACKWARDS = 'backward' | FORWARDS = 'forward'; Operator: d=OperatorE; enum OperatorE: AND = '&&' | OR = '||'; BackFront: d=BackFrontE; enum BackFrontE: BACK = 'back' | FRONT = 'front'; LeftRight: d=LeftRightE; enum LeftRightE: LEFT='left' | RIGHT='right'; Color: d=ColorE; enum ColorE: RED='Red' | GREEN='Green' | BLUE='Blue' | YELLOW='Yellow' | MAGENTA='Magenta'| ORANGE='Orange'| WHITE='White' | BLACK='Black' | PINK='Pink' | GRAY='Gray' | LIGHTGRAY='LightGray' | DARKGRAY='DarkGray' | CYAN='Cyan' | BROWN='Brown';