Class: Lrama::Grammar::Parameterized::Rhs

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeRhs

Returns a new instance of Rhs.



13
14
15
16
17
# File 'lib/lrama/grammar/parameterized/rhs.rb', line 13

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

Instance Attribute Details

#precedence_symObject

: Grammar::Symbol?



10
11
12
# File 'lib/lrama/grammar/parameterized/rhs.rb', line 10

def precedence_sym
  @precedence_sym
end

#symbolsObject

: Array



8
9
10
# File 'lib/lrama/grammar/parameterized/rhs.rb', line 8

def symbols
  @symbols
end

#user_codeObject

: Lexer::Token::UserCode?



9
10
11
# File 'lib/lrama/grammar/parameterized/rhs.rb', line 9

def user_code
  @user_code
end

Instance Method Details

#resolve_user_code(bindings) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/lrama/grammar/parameterized/rhs.rb', line 20

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