Disambiguate ast_ptr errors.
Add dump methods to expression nodes for debugging.
Add more sensible .gitignore.
Made the current ast pointer thread-local and documented what it actually does.
Added per-file copyright notices.
Compile-time check for calling invalid copy constructor instead of run-time.
Note: This is actually quite wrong.  Rules should be immutable (ideally with constexpr constructors) and state should be an attribute of the current parse.
Use unordered_map where ordering is not required.
Reduce use of identifiers that start with underscores.
Use idiomatic C++ to create / destroy the parser map (which should go away anyway, as having a single global map is a terrible idea).
Remove pragma related to dead code.
Replace direct use of std::vector<> with an abstract input that can read characters (and do character set conversion if required) on demand.