X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=dsl%2Fxtend%2Fsrc%2Frobots%2Fmissions%2FTaskDSL.xtext;h=afefa5df1a8758752b7ea82ea66ba0ddd9cc9f50;hb=3a12cfb82749c7ca2cec2d31da1b4d62ffe9e7e2;hp=3302953bcfe864f8e76f4bc37ba95108b1d66bfd;hpb=e880e959fed2d3506a790d3b361a2ed4aa49a95f;p=des2015.git diff --git a/dsl/xtend/src/robots/missions/TaskDSL.xtext b/dsl/xtend/src/robots/missions/TaskDSL.xtext index 3302953..afefa5d 100644 --- a/dsl/xtend/src/robots/missions/TaskDSL.xtext +++ b/dsl/xtend/src/robots/missions/TaskDSL.xtext @@ -3,23 +3,24 @@ 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 behaviour+=Behaviour+ mission+=Mission+; -Mission: 'Mission' name=ID 'using' behaviours+=[Behaviour]+ 'and stops when' stoppingExpression=StoppingExpression; +Mission: + 'Mission' name=ID 'using' behaviours+=[Behaviour]+ 'and stops when' se=StoppingExpression; StoppingExpression: - '(' op=Operator s+=StoppingExpression s+=StoppingExpression* ')' | - scond=StoppingCondition -; + '(' op=Operator s+=StoppingExpression s+=StoppingExpression+ ')' | + 'not ' negscond=StoppingCondition | + scond=StoppingCondition; StoppingCondition: 'Collected at least' colors+=Color+ | 'Touched on' touch=LeftRight | - 'Distance' op=Comparison dist=INT 'cm' | + 'Light on' light=LeftRight | + 'Distance dangerous at ' dist=BackFront | 'Color is' color=Color; Behaviour: 'Behaviour' name=ID @@ -27,17 +28,26 @@ Behaviour: 'Behaviour' name=ID 'action:' actions+=Action+; Action: - whichMotor=LeftRight 'motor' dir=Direction ('with speed' spd=INT 'acceleration' acc=INT)? | + whichMotor=LeftRight 'motor' moveDir=Direction ('with speed' spd=INT 'acceleration' acc=INT)? | + 'turn' turnDir=LeftRight degrees=INT ('with speed' spd=INT 'acceleration' acc=INT)? | + {Action} 'measure'| 'wait' time=Time; Time: time=INT 'ms' | {Time} 'forever'; - -enum Direction: BACKWARDS = 'Backwards' | FORWARDS = 'Forwards'; -enum Operator: AND = 'and' | OR = 'or'; -enum Comparison: GE='>' | LE='<'; -enum LeftRight: LEFT='Left' | RIGHT='Right'; -enum Color: - BLACK='Black' | BLUE='Blue' | BROWN='Brown' | CYAN='Cyan' | - DARKGRAY='DarkGray' | GRAY='Gray' | GREEN='Green' | - LIGHTGRAY='LightGray' | MAGENTA='Magenta' | ORANGE='Orange' | PINK='Pink' | - RED='Red' | WHITE='White' | YELLOW='Yellow'; \ No newline at end of file + +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'; \ No newline at end of file