ok i think i finally worked out why this parser is weird maybe