Class: Lrama::Grammar::ParameterizingRule::Rhs

Inherits:
Object
  • Object
show all
Defined in:
lib/lrama/grammar/parameterizing_rule/rhs.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeRhs

Returns a new instance of Rhs.



9
10
11
12
13
# File 'lib/lrama/grammar/parameterizing_rule/rhs.rb', line 9

def initialize
  @symbols = []
  @user_code = nil
  @precedence_sym = nil
end

Instance Attribute Details

#precedence_symObject

Returns the value of attribute precedence_sym.



7
8
9
# File 'lib/lrama/grammar/parameterizing_rule/rhs.rb', line 7

def precedence_sym
  @precedence_sym
end

#symbolsObject

Returns the value of attribute symbols.



7
8
9
# File 'lib/lrama/grammar/parameterizing_rule/rhs.rb', line 7

def symbols
  @symbols
end

#user_codeObject

Returns the value of attribute user_code.



7
8
9
# File 'lib/lrama/grammar/parameterizing_rule/rhs.rb', line 7

def user_code
  @user_code
end

Instance Method Details

#resolve_user_code(bindings) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/lrama/grammar/parameterizing_rule/rhs.rb', line 15

def resolve_user_code(bindings)
  return unless user_code

  resolved = Lexer::Token::UserCode.new(s_value: user_code.s_value, location: user_code.location)
  var_to_arg = {} #: Hash[String, String]
  symbols.each do |sym|
    resolved_sym = bindings.resolve_symbol(sym)
    if resolved_sym != sym
      var_to_arg[sym.s_value] = resolved_sym.s_value
    end
  end

  var_to_arg.each do |var, arg|
    resolved.references.each do |ref|
      if ref.name == var
        ref.name = arg
      end
    end
  end

  return resolved
end