src/lib/lex.c
changeset 18 b12e78767248
parent 16 74fb62022fb3
equal deleted inserted replaced
17:0a024b29b16d 18:b12e78767248
    37 
    37 
    38     // process input
    38     // process input
    39     do {
    39     do {
    40         if (*c) {
    40         if (*c) {
    41             // look up the next state
    41             // look up the next state
    42             for (trans = lex->state_list[cur_state - 1].trans_list; trans->next_state > 0; trans++) {
    42             for (trans = lex->state_list[cur_state - 1].trans_list; trans->next_state > 0 || trans->flags; trans++) {
    43                 // accept defaults
    43                 // accept defaults
    44                 if (trans->flags & LEX_TRANS_DEFAULT)
    44                 if (trans->flags & LEX_TRANS_DEFAULT)
    45                     break;
    45                     break;
    46                 
    46                 
    47                 // disregard non-matches
    47                 // disregard non-matches
    48                 if (trans->left > *c || *c > trans->right)
    48                 if (trans->left > *c || *c > trans->right)
    49                     continue;
    49                     continue;
    50                 
    50                 
    51                 // abort on invalids
    51                 // abort on invalids
    52                 if (trans->flags & LEX_TRANS_INVALID)
    52                 if (trans->flags & LEX_TRANS_INVALID) {
    53                     goto error;
    53                     goto error;
    54                 
    54                 
    55                 else {
    55                 } else {
    56                     // accept it
    56                     // accept it
    57                     break;
    57                     break;
    58                 }
    58                 }
    59             }
    59             }
    60             
    60