Notes...
"grammar A;;" says
error(17): A;.g:1:10: extraneous input ';' expecting EOF
in v3:
CodeGenerator.generateLocalFOLLOW():
if ( follow.member(Label.EOF) ) { // TODO: can we just remove? Seems needed here: // compilation_unit : global_statement* EOF // Actually i guess we resync to EOF regardless follow.remove(Label.EOF); }
I think we do need EOF. dang. I'm running into an error recovery set that doesn't have EOF when it's needed.
Havng trouble figuring out what "exact" parameter does in combineFollows() in runtime.
it seems to only add sets from above on stack if EOR is in set i. When it sees a set w/o EOR, it stops adding. Why would we ever want them all? Maybe no viable alt instead of mismatched token?
a : sync ( stuff sync )* ;
should be part of ()* DFA (for entry/exit/choice). check looks for mismatch (via dfa). If fails, consumeUntil start of loop or follow of loop. Recheck to see if dfa predicts loop. If it does, enter. If predicts exit, then just exit and proceed normally.