Add SymbolID
This commit is contained in:
parent
9dbae78724
commit
950fafc872
@ -448,10 +448,15 @@ class <%= @classname %>
|
|||||||
static class Parser
|
static class Parser
|
||||||
{
|
{
|
||||||
alias ReduceID = <%= get_type_for(@parser.reduce_table.size) %>;
|
alias ReduceID = <%= get_type_for(@parser.reduce_table.size) %>;
|
||||||
|
<% # A "symbol" is either a token ID or a rule set ID. %>
|
||||||
|
<% # %>
|
||||||
|
<% # Rule set IDs start after token IDs, so to store either a token ID %>
|
||||||
|
<% # or a rule set ID, we just need to know the maximum rule set ID. %>
|
||||||
|
alias SymbolID = <%= get_type_for(@parser.rule_sets.map(&:last).map(&:id).max) %>;
|
||||||
|
|
||||||
private struct Shift
|
private struct Shift
|
||||||
{
|
{
|
||||||
uint symbol;
|
SymbolID symbol;
|
||||||
uint state;
|
uint state;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -459,7 +464,7 @@ class <%= @classname %>
|
|||||||
{
|
{
|
||||||
Token token;
|
Token token;
|
||||||
uint rule;
|
uint rule;
|
||||||
uint rule_set;
|
SymbolID rule_set;
|
||||||
uint n_states;
|
uint n_states;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -514,7 +519,7 @@ class <%= @classname %>
|
|||||||
Lexer.TokenInfo token_info;
|
Lexer.TokenInfo token_info;
|
||||||
Token token = INVALID_TOKEN_ID;
|
Token token = INVALID_TOKEN_ID;
|
||||||
StateValue[] statevalues = new StateValue[](1);
|
StateValue[] statevalues = new StateValue[](1);
|
||||||
uint reduced_rule_set = INVALID_ID;
|
size_t reduced_rule_set = INVALID_ID;
|
||||||
ParserValue reduced_parser_value;
|
ParserValue reduced_parser_value;
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
@ -592,7 +597,7 @@ class <%= @classname %>
|
|||||||
return parse_result.v_<%= start_rule_type[0] %>;
|
return parse_result.v_<%= start_rule_type[0] %>;
|
||||||
}
|
}
|
||||||
|
|
||||||
private uint check_shift(uint state, uint symbol)
|
private uint check_shift(uint state, size_t symbol)
|
||||||
{
|
{
|
||||||
uint start = states[state].shift_table_index;
|
uint start = states[state].shift_table_index;
|
||||||
uint end = start + states[state].n_shift_entries;
|
uint end = start + states[state].n_shift_entries;
|
||||||
|
@ -5,6 +5,7 @@ class Propane
|
|||||||
attr_reader :state_table
|
attr_reader :state_table
|
||||||
attr_reader :shift_table
|
attr_reader :shift_table
|
||||||
attr_reader :reduce_table
|
attr_reader :reduce_table
|
||||||
|
attr_reader :rule_sets
|
||||||
|
|
||||||
def initialize(grammar, rule_sets, log)
|
def initialize(grammar, rule_sets, log)
|
||||||
@grammar = grammar
|
@grammar = grammar
|
||||||
|
Loading…
x
Reference in New Issue
Block a user