even better tokenization, handled trailing empty values e.g. (a b;\n) which were parsed incorrectly