Destructor.
~parser() = default;
All dynamically allocated memory, including any incomplete parsing results, is freed.
Linear in the size of partial results
No-throw guarantee.