Refine logic for deciding when tokens need to be re-lexed

* While generating the lex table, note which tokens can match the
  same string. A token needs to be relexed when it has possible
  homonyms in the current state.
* Also note which tokens can match substrings of each other tokens.
  A token needs to be relexed when there are viable tokens that
  could match longer strings in the current state and the next
  token has been edited.
* Remove the logic for marking tokens as fragile on creation.
* Store the reusability/non-reusability of symbols off of individual
  actions and onto the entire entry for the state & symbol.
This commit is contained in:
Max Brunsfeld 2016-06-21 07:28:04 -07:00
parent 45f7cee0c8
commit 38c144b4a3
19 changed files with 337 additions and 257 deletions

View file

@ -32,10 +32,14 @@ typedef struct TSTree {
TSLength size;
TSSymbol symbol;
TSStateId lex_state;
TSStateId parse_state;
size_t error_size;
struct {
TSSymbol symbol;
TSStateId lex_state;
} first_leaf;
unsigned short ref_count;
bool visible : 1;
bool named : 1;