extract common parsers into new base trait