...
- tokenVocab '++'=33 imported to lexer doesn't define a literal; should it? nah
- T='++' in tokens{} of combined should go to lexer rule for '++' I guess? nah
don't allow actions in fragment rules; they don't exec
- don't allow -> on more than one alt in lexer rule? same with actions?
- we need an on-demand input stream so that we can process huge files without storing anything. They have to read and process at the same time. copy code from the lazy version I was starting in that branch.
- generating unneeded action funcs in lexer
- don't allow labels or parameters or return values on lexer elements
- don't allow actions except at right edge
FOO : X (Y {foo();} | Z {bar();}); silently drops the {foo();} after Y. what is allowed? it's fine to have FOO : X Y {foo();} | X Z {bar();}; - predicates should be allowed in the lexer.
- should we allow same token name in multiple modes? seems useful.
- Using the first ANY_GENERAL rule, it consumes everything. Swapping for the second ANY_GENERAL rule, it works as intended.
Code Block fragment START_TAG : '<'; fragment WORDCHAR : 'a'..'z' \| 'A'..'Z' \| '0'..'9' \| '_'; TAG_START : START_TAG WORDCHAR\+ { pushMode(IN_TAG); }; ANY_GENERAL : \~START_TAG+; // ANY_GENERAL : \~'<'+;I don't understand why they are not doing the same thing?
- import mode pulls rules into another mode; shares common stuff like WS, ID, etc...
...