[ ]'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 - > '+' | '-'
Send questions and comments to: Karen Lemone