Add INVALID_ID
This commit is contained in:
parent
83a4037740
commit
6daca1e73f
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user