(* l00 - constant expressions *) program = expression { ';' expression } '.' . expression = [ '+' | '-' ] term { ( '+' | '-' ) term } . term = factor { ( '*' | '/' ) factor } . factor = number | '(' expression ')' . (* terminals = number ( * / + - ) ; . first(expression) = number ( + - first(term) = number ( first(factor) = number ( follow(expression) = ) ; . follow(term) = + - ) ; . follow(factor) = * / + - ) ; . The language has been choosen such that a simple stack machine (no command store) suffices for execution. Compilation is possible, of course, but not needed (and therefore not implemented). *)