With this patch, we're able to parse smaller chunks of C++ code (statement,
declaration), rather than translation-unit.
The target symbol is listed in the grammar in a form of `_ :=
statement`, each target symbol has a dedicated state (_ := • statement).
We create and track all these separate states in the LRTable. When we
start parsing, we lookup the corresponding state to start the parser.
LR pasing table changes with this patch:
- number of states: 1467 -> 1471
- number of actions: 82891 -> 83578
- size of the table (bytes): 334248 -> 336996
From the caller's perspective, is "target symbol" really a clearer name than "start symbol"? The latter seems like more common terminology.