StoppingExpression:
'(' op=Operator s+=StoppingExpression s+=StoppingExpression+ ')' |
- 'not ' negscond=StoppingCondition |
+ 'not ' negscond=StoppingExpression |
scond=StoppingCondition;
StoppingCondition:
- 'Collected at least' colors+=Color+ |
+ 'flag set' varName=ID |
'Touched on' touch=LeftRight |
'Light on' light=LeftRight |
- 'No object in sight on ' dist=BackFront |
- 'Color is' color=Color;
+ 'Distance dangerous at ' dist=BackFront |
+ 'Color is' color=Color |
+ {StoppingCondition} 'Never';
-Behaviour: 'Behaviour' name=ID
+Behaviour: 'Behaviour' name=ID
'take control:' tc=StoppingExpression?
- 'action:' actions+=Action+;
+ 'action:' actions+=Action+
+ ;
Action:
- whichMotor=LeftRight 'motor' dir=Direction ('with speed' spd=INT 'acceleration' acc=INT)? |
- 'measure' measureWhat=RockLake |
- 'wait' time=Time;
+ 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';
+enum RockLakeE: ROCK='Rock' | LAKE='Lake';
Direction: d=DirectionE;
enum DirectionE: BACKWARDS = 'backward' | FORWARDS = 'forward';
Operator: d=OperatorE;
-enum OperatorE: AND = 'and' | OR = 'or';
+enum OperatorE: AND = '&&' | OR = '||';
BackFront: d=BackFrontE;
enum BackFrontE: BACK = 'back' | FRONT = 'front';
-Comparison: d=ComparisonE;
-enum ComparisonE: GE='>' | LE='<';
LeftRight: d=LeftRightE;
enum LeftRightE: LEFT='left' | RIGHT='right';
Color: d=ColorE;