update to use parser combinators