program ::= rule rule^* rule ::= condition --> command ; command ::= update^* update-or-action update-or-action ::= update | action update ::= "mem" [ expr ] := expr action ::= "wait" | "forward" | "backward" | "left" | "right" | "eat" | "attack" | "grow" | "bud" | "mate" | "tag" [ expr ] | "serve" [ expr ] condition ::= conjunction (( "or" conjunction ))^* conjunction ::= relation (( "and" relation ))^* relation ::= expr rel expr | { condition } rel ::= < | <= | = | >= | > | != expr ::= term (( addop term ))^* term ::= factor (( mulop factor ))^* factor ::= | "mem" [ expr ] | ( expr ) | - factor | sensor sensor ::= "nearby" [ expr ] | "ahead" [ expr ] | "random" [ expr ] | "smell" addop ::= + | - mulop ::= * | / | "mod"