separate parsing and eval and simplify eval