For tokens matched by literals only (like keywords), only compare the
kind. For `@symbol` tokens (generally matched by patterns), also compare
the symbol. For all the other tokens, keep comparing the actual token
text.
Note that this fixes the sorting of enum types by name. It used to be
done only during the `CompileTypeRepo -> CompileCtx` transition, and tha
transition used to happen before all enum types were known.
Whether unparsers are generated or not has implications on legality
checks for the grammar, so it makes sense for this to be a property of
the grammar itself: introduce an Lkt annotation as well as a
langkit.parsers.Grammar argument for it, and remove the corresponding
CompileCtx argument.
Also rename "generate_unparser" to "generate_unparsers" for consistency
across the codebase.
Transition all relevant testcases to it. In the process, port
docstrings/comments from test.py files to expected_concrete_syntax.lkt
(now test.lkt) sources and fix stylechecks issues there.
The purpose of these overloads is to catch managed exceptions (that
properties may raise) but not the other ones (that may indicate
Langkit/user program bugs).