<program> ::= <function> + . <function> ::= name "(" ")" <block> . <block> ::= "{" <statment> * "}" . <statment> ::= <command> ";" | "if" "(" <condition> ")" <statment> ( "else" <statment> ) ? | "while" "(" <condition> ")" <statment> | "loop" <statment> | "repeat" "(" number ")" <statment> | <block> . <command> ::= "left" | "move" | "put" | "take" | "break" | "continue" | "return" | "stop" | name "(" ")" | . <condition> ::= "!" * ( "north" | "wall" | "have" | "find" ) .