Rename result_type to ptype, parser result to pvalue
This commit is contained in:
parent
bca0a14371
commit
8dc27686aa
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
>>
|
||||
|
Loading…
x
Reference in New Issue
Block a user