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 col;
|
||||||
size_t length;
|
size_t length;
|
||||||
uint token;
|
uint token;
|
||||||
<%= @grammar.result_type %> result;
|
<%= @grammar.ptype %> pvalue;
|
||||||
}
|
}
|
||||||
|
|
||||||
private string m_input;
|
private string m_input;
|
||||||
@ -346,10 +346,10 @@ class <%= @classname %>
|
|||||||
uint n_reduce_entries;
|
uint n_reduce_entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
private struct StateResult
|
private struct StateValue
|
||||||
{
|
{
|
||||||
uint state;
|
uint state;
|
||||||
<%= @grammar.result_type %> result;
|
<%= @grammar.ptype %> pvalue;
|
||||||
|
|
||||||
this(uint state)
|
this(uint state)
|
||||||
{
|
{
|
||||||
@ -378,7 +378,7 @@ class <%= @classname %>
|
|||||||
|
|
||||||
private Lexer m_lexer;
|
private Lexer m_lexer;
|
||||||
|
|
||||||
private <%= @grammar.result_type %> parse_result;
|
private <%= @grammar.ptype %> parse_result;
|
||||||
|
|
||||||
this(string input)
|
this(string input)
|
||||||
{
|
{
|
||||||
@ -389,9 +389,9 @@ class <%= @classname %>
|
|||||||
{
|
{
|
||||||
Lexer.LexedToken lexed_token;
|
Lexer.LexedToken lexed_token;
|
||||||
uint token = _TOKEN_COUNT;
|
uint token = _TOKEN_COUNT;
|
||||||
StateResult[] stateresults = new StateResult[](1);
|
StateValue[] statevalues = new StateValue[](1);
|
||||||
uint reduced_rule_set = 0xFFFFFFFFu;
|
uint reduced_rule_set = 0xFFFFFFFFu;
|
||||||
<%= @grammar.result_type %> reduced_parse_result;
|
<%= @grammar.ptype %> reduced_parse_result;
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
if (token == _TOKEN_COUNT)
|
if (token == _TOKEN_COUNT)
|
||||||
@ -402,46 +402,46 @@ class <%= @classname %>
|
|||||||
uint shift_state = 0xFFFFFFFFu;
|
uint shift_state = 0xFFFFFFFFu;
|
||||||
if (reduced_rule_set != 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)
|
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))
|
if ((shift_state != 0xFFFFFFFFu) && (token == TOKEN_0EOF))
|
||||||
{
|
{
|
||||||
/* Successful parse. */
|
/* Successful parse. */
|
||||||
parse_result = stateresults[$-1].result;
|
parse_result = statevalues[$-1].pvalue;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (shift_state != 0xFFFFFFFFu)
|
if (shift_state != 0xFFFFFFFFu)
|
||||||
{
|
{
|
||||||
/* We have something to shift. */
|
/* We have something to shift. */
|
||||||
stateresults ~= StateResult(shift_state);
|
statevalues ~= StateValue(shift_state);
|
||||||
if (reduced_rule_set == 0xFFFFFFFFu)
|
if (reduced_rule_set == 0xFFFFFFFFu)
|
||||||
{
|
{
|
||||||
/* We shifted a token, mark it consumed. */
|
/* We shifted a token, mark it consumed. */
|
||||||
token = _TOKEN_COUNT;
|
token = _TOKEN_COUNT;
|
||||||
stateresults[$-1].result = lexed_token.result;
|
statevalues[$-1].pvalue = lexed_token.pvalue;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* We shifted a RuleSet. */
|
/* We shifted a RuleSet. */
|
||||||
stateresults[$-1].result = reduced_parse_result;
|
statevalues[$-1].pvalue = reduced_parse_result;
|
||||||
<%= @grammar.result_type %> new_parse_result;
|
<%= @grammar.ptype %> new_parse_result;
|
||||||
reduced_parse_result = new_parse_result;
|
reduced_parse_result = new_parse_result;
|
||||||
reduced_rule_set = 0xFFFFFFFFu;
|
reduced_rule_set = 0xFFFFFFFFu;
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint reduce_index = check_reduce(stateresults[$-1].state, token);
|
uint reduce_index = check_reduce(statevalues[$-1].state, token);
|
||||||
if (reduce_index != 0xFFFFFFFFu)
|
if (reduce_index != 0xFFFFFFFFu)
|
||||||
{
|
{
|
||||||
/* We have something to reduce. */
|
/* 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;
|
reduced_rule_set = reduces[reduce_index].rule_set;
|
||||||
stateresults.length -= reduces[reduce_index].n_states;
|
statevalues.length -= reduces[reduce_index].n_states;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -459,7 +459,7 @@ class <%= @classname %>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@property <%= @grammar.result_type %> result()
|
@property <%= @grammar.ptype %> result()
|
||||||
{
|
{
|
||||||
return parse_result;
|
return parse_result;
|
||||||
}
|
}
|
||||||
@ -515,11 +515,11 @@ class <%= @classname %>
|
|||||||
*
|
*
|
||||||
* @param rule The ID of the rule.
|
* @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)
|
switch (rule)
|
||||||
{
|
{
|
||||||
@ -533,7 +533,7 @@ class <%= @classname %>
|
|||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _result;
|
return _pvalue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -168,15 +168,15 @@ class Propane
|
|||||||
end
|
end
|
||||||
if parser
|
if parser
|
||||||
code = code.gsub(/\$\$/) do |match|
|
code = code.gsub(/\$\$/) do |match|
|
||||||
"_result"
|
"_pvalue"
|
||||||
end
|
end
|
||||||
code = code.gsub(/\$(\d+)/) do |match|
|
code = code.gsub(/\$(\d+)/) do |match|
|
||||||
index = $1.to_i
|
index = $1.to_i
|
||||||
"stateresults[$-1-n_states+#{index}].result"
|
"statevalues[$-1-n_states+#{index}].pvalue"
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
code = code.gsub(/\$\$/) do |match|
|
code = code.gsub(/\$\$/) do |match|
|
||||||
"lt.result"
|
"lt.pvalue"
|
||||||
end
|
end
|
||||||
code = code.gsub(/\$mode\(([a-zA-Z_][a-zA-Z_0-9]*)\)/) do |match|
|
code = code.gsub(/\$mode\(([a-zA-Z_][a-zA-Z_0-9]*)\)/) do |match|
|
||||||
mode_name = $1
|
mode_name = $1
|
||||||
|
@ -8,7 +8,7 @@ class Propane
|
|||||||
attr_reader :rules
|
attr_reader :rules
|
||||||
attr_reader :tokens
|
attr_reader :tokens
|
||||||
attr_reader :code_blocks
|
attr_reader :code_blocks
|
||||||
attr_reader :result_type
|
attr_reader :ptype
|
||||||
|
|
||||||
def initialize(input)
|
def initialize(input)
|
||||||
@patterns = []
|
@patterns = []
|
||||||
@ -19,7 +19,7 @@ class Propane
|
|||||||
@next_line_number = @line_number
|
@next_line_number = @line_number
|
||||||
@mode = nil
|
@mode = nil
|
||||||
@input = input.gsub("\r\n", "\n")
|
@input = input.gsub("\r\n", "\n")
|
||||||
@result_type = "void *"
|
@ptype = "void *"
|
||||||
parse_grammar!
|
parse_grammar!
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -37,7 +37,7 @@ class Propane
|
|||||||
elsif @mode.nil? && parse_mode_label!
|
elsif @mode.nil? && parse_mode_label!
|
||||||
elsif parse_module_statement!
|
elsif parse_module_statement!
|
||||||
elsif parse_class_statement!
|
elsif parse_class_statement!
|
||||||
elsif parse_result_type_statement!
|
elsif parse_ptype_statement!
|
||||||
elsif parse_pattern_statement!
|
elsif parse_pattern_statement!
|
||||||
elsif parse_token_statement!
|
elsif parse_token_statement!
|
||||||
elsif parse_tokenid_statement!
|
elsif parse_tokenid_statement!
|
||||||
@ -86,10 +86,10 @@ class Propane
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def parse_result_type_statement!
|
def parse_ptype_statement!
|
||||||
if consume!(/result_type\s+/)
|
if consume!(/ptype\s+/)
|
||||||
md = consume!(/([^;]+);/, "expected result type expression")
|
md = consume!(/([^;]+);/, "expected result type expression")
|
||||||
@result_type = md[1].strip
|
@ptype = md[1].strip
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ class Propane
|
|||||||
|
|
||||||
module a.b;
|
module a.b;
|
||||||
class Foobar;
|
class Foobar;
|
||||||
result_type XYZ * ;
|
ptype XYZ * ;
|
||||||
|
|
||||||
token while;
|
token while;
|
||||||
|
|
||||||
@ -32,7 +32,7 @@ EOF
|
|||||||
grammar = Grammar.new(input)
|
grammar = Grammar.new(input)
|
||||||
expect(grammar.classname).to eq "Foobar"
|
expect(grammar.classname).to eq "Foobar"
|
||||||
expect(grammar.modulename).to eq "a.b"
|
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"}
|
o = grammar.tokens.find {|token| token.name == "while"}
|
||||||
expect(o).to_not be_nil
|
expect(o).to_not be_nil
|
||||||
|
@ -263,7 +263,7 @@ EOF
|
|||||||
|
|
||||||
it "parses lists" do
|
it "parses lists" do
|
||||||
write_grammar <<EOF
|
write_grammar <<EOF
|
||||||
result_type uint;
|
ptype uint;
|
||||||
token a;
|
token a;
|
||||||
Start -> As <<
|
Start -> As <<
|
||||||
$$ = $1;
|
$$ = $1;
|
||||||
@ -320,7 +320,7 @@ EOF
|
|||||||
|
|
||||||
it "allows storing a result value for the lexer" do
|
it "allows storing a result value for the lexer" do
|
||||||
write_grammar <<EOF
|
write_grammar <<EOF
|
||||||
result_type ulong;
|
ptype ulong;
|
||||||
token word /[a-z]+/ <<
|
token word /[a-z]+/ <<
|
||||||
$$ = match.length;
|
$$ = match.length;
|
||||||
>>
|
>>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user