use non-recursive parser and proper grammar