refactor parser.Parser