Add INVALID_ID

This commit is contained in:
Josh Holtrop 2023-07-08 10:49:56 -04:00
parent 83a4037740
commit 6daca1e73f

View File

@ -23,6 +23,9 @@ class <%= @classname %>
P_EOF, P_EOF,
} }
/* An invalid ID value. */
private enum INVALID_ID = 0xFFFF_FFFFu;
alias TokenID = uint; alias TokenID = uint;
enum : TokenID enum : TokenID
@ -585,7 +588,7 @@ class <%= @classname %>
Lexer.TokenInfo token_info; Lexer.TokenInfo token_info;
uint token = _TOKEN_COUNT; uint token = _TOKEN_COUNT;
StateValue[] statevalues = new StateValue[](1); StateValue[] statevalues = new StateValue[](1);
uint reduced_rule_set = 0xFFFFFFFFu; uint reduced_rule_set = INVALID_ID;
ParserValue reduced_parser_value; ParserValue reduced_parser_value;
for (;;) for (;;)
{ {
@ -598,26 +601,26 @@ class <%= @classname %>
} }
token = token_info.token; token = token_info.token;
} }
uint shift_state = 0xFFFFFFFFu; uint shift_state = INVALID_ID;
if (reduced_rule_set != 0xFFFFFFFFu) if (reduced_rule_set != INVALID_ID)
{ {
shift_state = check_shift(statevalues[$-1].state, reduced_rule_set); shift_state = check_shift(statevalues[$-1].state, reduced_rule_set);
} }
if (shift_state == 0xFFFFFFFFu) if (shift_state == INVALID_ID)
{ {
shift_state = check_shift(statevalues[$-1].state, token); shift_state = check_shift(statevalues[$-1].state, token);
if ((shift_state != 0xFFFFFFFFu) && (token == TOKEN___EOF)) if ((shift_state != INVALID_ID) && (token == TOKEN___EOF))
{ {
/* Successful parse. */ /* Successful parse. */
parse_result = statevalues[$-1].pvalue; parse_result = statevalues[$-1].pvalue;
return P_SUCCESS; return P_SUCCESS;
} }
} }
if (shift_state != 0xFFFFFFFFu) if (shift_state != INVALID_ID)
{ {
/* We have something to shift. */ /* We have something to shift. */
statevalues ~= StateValue(shift_state); statevalues ~= StateValue(shift_state);
if (reduced_rule_set == 0xFFFFFFFFu) if (reduced_rule_set == INVALID_ID)
{ {
/* We shifted a token, mark it consumed. */ /* We shifted a token, mark it consumed. */
token = _TOKEN_COUNT; token = _TOKEN_COUNT;
@ -629,13 +632,13 @@ class <%= @classname %>
statevalues[$-1].pvalue = reduced_parser_value; statevalues[$-1].pvalue = reduced_parser_value;
ParserValue new_parse_result; ParserValue new_parse_result;
reduced_parser_value = new_parse_result; reduced_parser_value = new_parse_result;
reduced_rule_set = 0xFFFFFFFFu; reduced_rule_set = INVALID_ID;
} }
continue; continue;
} }
uint reduce_index = check_reduce(statevalues[$-1].state, token); uint reduce_index = check_reduce(statevalues[$-1].state, token);
if (reduce_index != 0xFFFFFFFFu) if (reduce_index != INVALID_ID)
{ {
/* We have something to reduce. */ /* We have something to reduce. */
reduced_parser_value = user_code(reduces[reduce_index].rule, statevalues, reduces[reduce_index].n_states); reduced_parser_value = user_code(reduces[reduce_index].rule, statevalues, reduces[reduce_index].n_states);
@ -682,7 +685,7 @@ class <%= @classname %>
return shifts[i].state; return shifts[i].state;
} }
} }
return 0xFFFFFFFFu; return INVALID_ID;
} }
private uint check_reduce(uint state, uint token) private uint check_reduce(uint state, uint token)
@ -706,7 +709,7 @@ class <%= @classname %>
return i; return i;
} }
} }
return 0xFFFFFFFFu; return INVALID_ID;
} }
/** /**