i didnt understand why program was defined in terms of itself so i altered it to make sense to me
changed the lexer to return a new token called add, the parser now looks for that token rather than the actual string +