- Place rules under rule::lhs::rhsrhsrhs
- Change mangling of keywords to ALL_CAPS (needed to turn keywords that appear alone on RHS into valid identifiers)
- Make enums implicitly convertible to underlying type (though still scoped, using alias tricks)
In principle this lets us exhaustively write a switch over all rules of a NT:
switch ((rule::declarator)N->rule()) { case rule::declarator::noptr_declarator: ... }
In practice we don't do this anywhere yet as we're often switching over multiple
nonterminal kinds at once.
why there is a dummy namespace here?