[ ]'s not within quotes are metasymbols meaning "0 or 1"
executable-part - > 'execute' '{' [statements] '}'
statements - > statements statement | statement
statement - > tell-statement |
new-statement |
iterate-statement|
remove-statement /* left place statement out */
tell-statement - > tell robot-name ':' instructions
tell - > 'tell' | 'Tell'
instructions - > '{' {instruction} '}' | instruction
new-statement - > new robot-type object-name ['at' coords]';'
new - > 'new' | 'New'
iterate-statement - > iterate expression 'times' statement
| iterate expression 'times' statement '{'statements '}'
iterate - > 'iterate' | 'Iterate'
remove-statement - > remove robot-name ';'
remove - > 'remove' | 'Remove'
instruction - > simple-instruction ';' |
control-instruction |
assignment-instruction
simple-instruction - > move expression |
pickbeeper |
putbeeper |
turnleft |
turnoff
move - > 'Move' | 'move'
pickbeeper - > 'pickbeeper' | 'PickBeeper' | 'pick_beeper'
putbeeper - > 'putbeeper'| 'PutBeeper' | 'put_beeper'
turnleft - > 'turnleft' | 'TurnLeft' | 'turn_left'
turnoff - > 'turnoff' | 'TurnOff ' | 'turn_off'
control-instruction - > if-instruction |
iterate-instruction |
while-instruction
if-instruction - > if '(' expression ')' instructions
else instructions |
if '(' expression ')' instructions
if - > 'if' | 'If'
else - > 'else' | 'Else'
iterate-instruction - > iterate expression 'times' instructions
while-instruction - > while expression instructions
while - > 'While' | 'while'
assignment-instruction - > variable-name '=' expression ';'
robot-name - > object-name
robot-type - > variable-name
variable-name - > object-name
object-name - > letter { lettdig }
coords - > expression "," expression
lettdig - > letter | digit | '_'
letter - > 'A'..'Z' | 'a'..'z'
digit - > '0'..'9'
Expression Grammar
expression - > relation {and relation} |
relation {or relation}
relation - > simple_expression [relop simple_expression]
simple_expression - > [sign] term {addop term}
term - > term mulop factor |
factor
factor - > not factor | ident | bool_function |
'(' expression ')'
ident - > variable-name | literal | integer_function
literal - > {digit}+
not - > '!' | 'not'
relop - > '==' | '!=' | '<' | '>' | '<=' | '>='
addop - > '+' | '-'
or - > 'or' | '||'
mulop - > '*' | '/'
and - > 'and' | '&&'
bool_function - > 'front_is_clear' | 'FrontIsClear' |
'right_is_clear' | 'RightIsClear' |
'left_is_clear' | 'LeftIsClear' |
'facing_north' | 'FacingNorth'
'facing_south' | 'FacingSouth'
'facing_east' | 'FacingEast'
'facing_west' | 'FacingWest'
integer_function - > 'beepers_in_bag' | 'BeepersInBag' |
'beepers_on_floor' | 'BeepersOnFloor' |
'x_position' | 'XPosition'
'y_position' | 'YPosition'
sign - > '+' | '-'