grammar robots.missions.TaskDSL with org.eclipse.xtext.common.Terminals generate taskDSL "http://www.missions.robots/TaskDSL" Robot: 'Name' name=ID 'Acceleration' acc=INT 'Speed' spd=INT 'LeftMotor plugged in' leftMotorPort=MotorPort 'RightMotor plugged in' righMotorPort=MotorPort ('ColorSensor plugged in' colorSensorPort=SensorPort)? ('TouchSensor plugged in' leftTouchSensorPort=SensorPort 'and' rightTouchSensorPort=SensorPort)? ('UltrasoneSensor plugged in' ultrasoneSensorPort=SensorPort)? ('Mission:' mission+=Mission)+; Mission: behaviours+=Behaviour+ 'stops when' stoppingCondition=StoppingCondition ; StoppingCondition: SensorLimitReached | CollectedColors; CollectedColors: 'Collected Colors:' colors+=ColorValue+ ; SensorLimitReached: TouchLimit | ColorLimit | DistanceLimit; ColorLimit: 'ColorLimit: ' lim=ColorValue ; TouchLimit: 'TouchStatus: ' lim=Touch ; Touch: 'Touch' | 'NoTouch' ; DistanceLimit: 'Distance:' dist=STRING 'meter' ; ColorValue: 'Black' | 'Blue' | 'Brown' | 'Cyan' | 'DarkGray' | 'Gray' | 'Green' | 'LightGray' | 'Magenta' | 'Orange' | 'Pink' | 'Red' | 'White' | 'Yellow' ; Behaviour: 'Behaviour' 'Name:' name=ID 'TakeControl:' takeControl=SensorLimitReached? 'Action:' action=Action ; Action: 'Avoid' | 'Wander' | 'Nothing' ; SensorPort: 'S1' | 'S2' | 'S3' | 'S4'; MotorPort: 'A' | 'B' | 'C' | 'D';