Skip to content

Commit fcd89bf

Browse files
committed
Lrama v0.6.9
1 parent d22dfce commit fcd89bf

File tree

5 files changed

+150
-127
lines changed

5 files changed

+150
-127
lines changed

tool/lrama/lib/lrama/grammar/parameterizing_rule/rhs.rb

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,28 @@ def initialize
99
@user_code = nil
1010
@precedence_sym = nil
1111
end
12+
13+
def resolve_user_code(bindings)
14+
return unless user_code
15+
16+
var_to_arg = {}
17+
symbols.each do |sym|
18+
resolved_sym = bindings.resolve_symbol(sym)
19+
if resolved_sym != sym
20+
var_to_arg[sym.s_value] = resolved_sym.s_value
21+
end
22+
end
23+
24+
var_to_arg.each do |var, arg|
25+
user_code.references.each do |ref|
26+
if ref.name == var
27+
ref.name = arg
28+
end
29+
end
30+
end
31+
32+
return user_code
33+
end
1234
end
1335
end
1436
end

tool/lrama/lib/lrama/grammar/parameterizing_rule/rule.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@ module Lrama
22
class Grammar
33
class ParameterizingRule
44
class Rule
5-
attr_reader :name, :parameters, :rhs_list, :required_parameters_count, :is_inline
5+
attr_reader :name, :parameters, :rhs_list, :required_parameters_count, :tag, :is_inline
66

7-
def initialize(name, parameters, rhs_list, is_inline: false)
7+
def initialize(name, parameters, rhs_list, tag: nil, is_inline: false)
88
@name = name
99
@parameters = parameters
1010
@rhs_list = rhs_list
11+
@tag = tag
1112
@is_inline = is_inline
1213
@required_parameters_count = parameters.count
1314
end

tool/lrama/lib/lrama/grammar/rule_builder.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,12 +130,12 @@ def process_rhs(parameterizing_rule_resolver)
130130
@replaced_rhs << lhs_token
131131
parameterizing_rule_resolver.created_lhs_list << lhs_token
132132
parameterizing_rule.rhs_list.each do |r|
133-
rule_builder = RuleBuilder.new(@rule_counter, @midrule_action_counter, lhs_tag: token.lhs_tag)
133+
rule_builder = RuleBuilder.new(@rule_counter, @midrule_action_counter, lhs_tag: token.lhs_tag || parameterizing_rule.tag)
134134
rule_builder.lhs = lhs_token
135135
r.symbols.each { |sym| rule_builder.add_rhs(bindings.resolve_symbol(sym)) }
136136
rule_builder.line = line
137137
rule_builder.precedence_sym = r.precedence_sym
138-
rule_builder.user_code = r.user_code
138+
rule_builder.user_code = r.resolve_user_code(bindings)
139139
rule_builder.complete_input
140140
rule_builder.setup_rules(parameterizing_rule_resolver)
141141
@rule_builders_for_parameterizing_rules << rule_builder

0 commit comments

Comments
 (0)