Most keywords don't just require the correct characters to match, they have to ensure that subsequent characters *don't* match in order for it to be a keyword.
Most keywords don't just require the correct characters to match, they have to ensure that subsequent characters *don't* match in order for it to be a keyword. This enforces that rule for key-words (W) and key-operators (O) which have different non-match criteria.
Most keywords don't just require the correct characters to match, they have to ensure that subsequent characters *don't* match in order for it to be a keyword.
Most keywords don't just require the correct characters to match, they have to ensure that subsequent characters *don't* match in order for it to be a keyword. This enforces that rule for key-words (W) and key-operators (O) which have different non-match criteria.
Parses whitespace, including newlines.
Parses all whitespace, excluding newlines.
Parses all whitespace, excluding newlines. This is only really useful in e.g. {} blocks, where we want to avoid capturing newlines so semicolon-inference would work
helper printing function