filled in more of the bnf grammar