Rename result_type to ptype, parser result to pvalue

This commit is contained in:
Josh Holtrop 2022-11-12 13:29:10 -05:00
parent bca0a14371
commit 8dc27686aa
5 changed files with 34 additions and 34 deletions

View File

@ -156,7 +156,7 @@ class <%= @classname %>
size_t col;
size_t length;
uint token;
<%= @grammar.result_type %> result;
<%= @grammar.ptype %> pvalue;
}
private string m_input;
@ -346,10 +346,10 @@ class <%= @classname %>
uint n_reduce_entries;
}
private struct StateResult
private struct StateValue
{
uint state;
<%= @grammar.result_type %> result;
<%= @grammar.ptype %> pvalue;
this(uint state)
{
@ -378,7 +378,7 @@ class <%= @classname %>
private Lexer m_lexer;
private <%= @grammar.result_type %> parse_result;
private <%= @grammar.ptype %> parse_result;
this(string input)
{
@ -389,9 +389,9 @@ class <%= @classname %>
{
Lexer.LexedToken lexed_token;
uint token = _TOKEN_COUNT;
StateResult[] stateresults = new StateResult[](1);
StateValue[] statevalues = new StateValue[](1);
uint reduced_rule_set = 0xFFFFFFFFu;
<%= @grammar.result_type %> reduced_parse_result;
<%= @grammar.ptype %> reduced_parse_result;
for (;;)
{
if (token == _TOKEN_COUNT)
@ -402,46 +402,46 @@ class <%= @classname %>
uint shift_state = 0xFFFFFFFFu;
if (reduced_rule_set != 0xFFFFFFFFu)
{
shift_state = check_shift(stateresults[$-1].state, reduced_rule_set);
shift_state = check_shift(statevalues[$-1].state, reduced_rule_set);
}
if (shift_state == 0xFFFFFFFFu)
{
shift_state = check_shift(stateresults[$-1].state, token);
shift_state = check_shift(statevalues[$-1].state, token);
if ((shift_state != 0xFFFFFFFFu) && (token == TOKEN_0EOF))
{
/* Successful parse. */
parse_result = stateresults[$-1].result;
parse_result = statevalues[$-1].pvalue;
return true;
}
}
if (shift_state != 0xFFFFFFFFu)
{
/* We have something to shift. */
stateresults ~= StateResult(shift_state);
statevalues ~= StateValue(shift_state);
if (reduced_rule_set == 0xFFFFFFFFu)
{
/* We shifted a token, mark it consumed. */
token = _TOKEN_COUNT;
stateresults[$-1].result = lexed_token.result;
statevalues[$-1].pvalue = lexed_token.pvalue;
}
else
{
/* We shifted a RuleSet. */
stateresults[$-1].result = reduced_parse_result;
<%= @grammar.result_type %> new_parse_result;
statevalues[$-1].pvalue = reduced_parse_result;
<%= @grammar.ptype %> new_parse_result;
reduced_parse_result = new_parse_result;
reduced_rule_set = 0xFFFFFFFFu;
}
continue;
}
uint reduce_index = check_reduce(stateresults[$-1].state, token);
uint reduce_index = check_reduce(statevalues[$-1].state, token);
if (reduce_index != 0xFFFFFFFFu)
{
/* We have something to reduce. */
reduced_parse_result = user_code(reduces[reduce_index].rule, stateresults, reduces[reduce_index].n_states);
reduced_parse_result = user_code(reduces[reduce_index].rule, statevalues, reduces[reduce_index].n_states);
reduced_rule_set = reduces[reduce_index].rule_set;
stateresults.length -= reduces[reduce_index].n_states;
statevalues.length -= reduces[reduce_index].n_states;
continue;
}
@ -459,7 +459,7 @@ class <%= @classname %>
}
}
@property <%= @grammar.result_type %> result()
@property <%= @grammar.ptype %> result()
{
return parse_result;
}
@ -515,11 +515,11 @@ class <%= @classname %>
*
* @param rule The ID of the rule.
*
* @return Parse result.
* @return Parse value.
*/
private <%= @grammar.result_type %> user_code(uint rule, StateResult[] stateresults, uint n_states)
private <%= @grammar.ptype %> user_code(uint rule, StateValue[] statevalues, uint n_states)
{
<%= @grammar.result_type %> _result;
<%= @grammar.ptype %> _pvalue;
switch (rule)
{
@ -533,7 +533,7 @@ class <%= @classname %>
default: break;
}
return _result;
return _pvalue;
}
}
}

View File

@ -168,15 +168,15 @@ class Propane
end
if parser
code = code.gsub(/\$\$/) do |match|
"_result"
"_pvalue"
end
code = code.gsub(/\$(\d+)/) do |match|
index = $1.to_i
"stateresults[$-1-n_states+#{index}].result"
"statevalues[$-1-n_states+#{index}].pvalue"
end
else
code = code.gsub(/\$\$/) do |match|
"lt.result"
"lt.pvalue"
end
code = code.gsub(/\$mode\(([a-zA-Z_][a-zA-Z_0-9]*)\)/) do |match|
mode_name = $1

View File

@ -8,7 +8,7 @@ class Propane
attr_reader :rules
attr_reader :tokens
attr_reader :code_blocks
attr_reader :result_type
attr_reader :ptype
def initialize(input)
@patterns = []
@ -19,7 +19,7 @@ class Propane
@next_line_number = @line_number
@mode = nil
@input = input.gsub("\r\n", "\n")
@result_type = "void *"
@ptype = "void *"
parse_grammar!
end
@ -37,7 +37,7 @@ class Propane
elsif @mode.nil? && parse_mode_label!
elsif parse_module_statement!
elsif parse_class_statement!
elsif parse_result_type_statement!
elsif parse_ptype_statement!
elsif parse_pattern_statement!
elsif parse_token_statement!
elsif parse_tokenid_statement!
@ -86,10 +86,10 @@ class Propane
end
end
def parse_result_type_statement!
if consume!(/result_type\s+/)
def parse_ptype_statement!
if consume!(/ptype\s+/)
md = consume!(/([^;]+);/, "expected result type expression")
@result_type = md[1].strip
@ptype = md[1].strip
end
end

View File

@ -6,7 +6,7 @@ class Propane
module a.b;
class Foobar;
result_type XYZ * ;
ptype XYZ * ;
token while;
@ -32,7 +32,7 @@ EOF
grammar = Grammar.new(input)
expect(grammar.classname).to eq "Foobar"
expect(grammar.modulename).to eq "a.b"
expect(grammar.result_type).to eq "XYZ *"
expect(grammar.ptype).to eq "XYZ *"
o = grammar.tokens.find {|token| token.name == "while"}
expect(o).to_not be_nil

View File

@ -263,7 +263,7 @@ EOF
it "parses lists" do
write_grammar <<EOF
result_type uint;
ptype uint;
token a;
Start -> As <<
$$ = $1;
@ -320,7 +320,7 @@ EOF
it "allows storing a result value for the lexer" do
write_grammar <<EOF
result_type ulong;
ptype ulong;
token word /[a-z]+/ <<
$$ = match.length;
>>