Class: Lrama::State::Item

Inherits:
Struct
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/lrama/state/item.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#positionObject

Returns the value of attribute position

Returns:

  • (Object)

    the current value of position



10
11
12
# File 'lib/lrama/state/item.rb', line 10

def position
  @position
end

#ruleObject

Returns the value of attribute rule

Returns:

  • (Object)

    the current value of rule



10
11
12
# File 'lib/lrama/state/item.rb', line 10

def rule
  @rule
end

Instance Method Details

#beginning_of_rule?Boolean

Returns:

  • (Boolean)


66
67
68
# File 'lib/lrama/state/item.rb', line 66

def beginning_of_rule?
  position == 0
end

#display_nameObject



101
102
103
104
# File 'lib/lrama/state/item.rb', line 101

def display_name
  r = rhs.map(&:display_name).insert(position, "•").join(" ")
  "#{r}  (rule #{rule_id})"
end

#display_restObject

Right after position



109
110
111
112
# File 'lib/lrama/state/item.rb', line 109

def display_rest
  r = symbols_after_dot.map(&:display_name).join(" ")
  ". #{r}  (rule #{rule_id})"
end

#empty_rule?Boolean

Returns:

  • (Boolean)


36
37
38
# File 'lib/lrama/state/item.rb', line 36

def empty_rule?
  rule.empty_rule?
end

#end_of_rule?Boolean

Returns:

  • (Boolean)


61
62
63
# File 'lib/lrama/state/item.rb', line 61

def end_of_rule?
  rhs.count == position
end

#hashObject

Optimization for States#setup_state



26
27
28
# File 'lib/lrama/state/item.rb', line 26

def hash
  [rule_id, position].hash
end

#new_by_next_positionObject



76
77
78
# File 'lib/lrama/state/item.rb', line 76

def new_by_next_position
  Item.new(rule: rule, position: position + 1)
end

#next_next_symObject



51
52
53
# File 'lib/lrama/state/item.rb', line 51

def next_next_sym
  @next_next_sym ||= rhs[position + 1]
end

#next_symObject



46
47
48
# File 'lib/lrama/state/item.rb', line 46

def next_sym
  rhs[position]
end

#number_of_rest_symbolsObject



41
42
43
# File 'lib/lrama/state/item.rb', line 41

def number_of_rest_symbols
  @number_of_rest_symbols ||= rhs.count - position
end

#predecessor_item_of?(other_item) ⇒ Boolean

Returns:

  • (Boolean)


115
116
117
# File 'lib/lrama/state/item.rb', line 115

def predecessor_item_of?(other_item)
  rule == other_item.rule && position == other_item.position - 1
end

#previous_symObject



56
57
58
# File 'lib/lrama/state/item.rb', line 56

def previous_sym
  rhs[position - 1]
end

#rule_idObject



31
32
33
# File 'lib/lrama/state/item.rb', line 31

def rule_id
  rule.id
end

#start_item?Boolean

Returns:

  • (Boolean)


71
72
73
# File 'lib/lrama/state/item.rb', line 71

def start_item?
  rule.initial_rule? && beginning_of_rule?
end

#symbols_after_dotObject



86
87
88
# File 'lib/lrama/state/item.rb', line 86

def symbols_after_dot # steep:ignore
  rhs[position..-1]
end

#symbols_after_transitionObject



91
92
93
# File 'lib/lrama/state/item.rb', line 91

def symbols_after_transition # steep:ignore
  rhs[position+1..-1]
end

#symbols_before_dotObject



81
82
83
# File 'lib/lrama/state/item.rb', line 81

def symbols_before_dot # steep:ignore
  rhs[0...position]
end

#to_sObject



96
97
98
# File 'lib/lrama/state/item.rb', line 96

def to_s
  "#{lhs.id.s_value}: #{display_name}"
end