grammar finished, starting with generation of code
[des2015.git] / dsl / xtend / src / robots / missions / TaskDSL.xtext
diff --git a/dsl/xtend/src/robots/missions/TaskDSL.xtext b/dsl/xtend/src/robots/missions/TaskDSL.xtext
new file mode 100644 (file)
index 0000000..3302953
--- /dev/null
@@ -0,0 +1,43 @@
+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;
+
+StoppingExpression:
+       '(' op=Operator s+=StoppingExpression s+=StoppingExpression* ')' |
+       scond=StoppingCondition
+;
+
+StoppingCondition:
+       'Collected at least' colors+=Color+ |
+       'Touched on' touch=LeftRight |
+       'Distance' op=Comparison dist=INT 'cm' |
+       'Color is' color=Color;
+
+Behaviour: 'Behaviour' name=ID 
+       'take control:' tc=StoppingExpression?
+       'action:' actions+=Action+;
+
+Action:
+       whichMotor=LeftRight 'motor' dir=Direction ('with speed' spd=INT 'acceleration' acc=INT)? |
+       '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