Class: Lrama::States::Item

Inherits:
Struct
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/lrama/states/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



9
10
11
# File 'lib/lrama/states/item.rb', line 9

def position
  @position
end

#ruleObject

Returns the value of attribute rule

Returns:

  • (Object)

    the current value of rule



9
10
11
# File 'lib/lrama/states/item.rb', line 9

def rule
  @rule
end

Instance Method Details

#beginning_of_rule?Boolean

Returns:

  • (Boolean)


47
48
49
# File 'lib/lrama/states/item.rb', line 47

def beginning_of_rule?
  position == 0
end

#display_nameObject



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

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

#display_restObject

Right after position



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

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

#empty_rule?Boolean

Returns:

  • (Boolean)


23
24
25
# File 'lib/lrama/states/item.rb', line 23

def empty_rule?
  rule.empty_rule?
end

#end_of_rule?Boolean

Returns:

  • (Boolean)


43
44
45
# File 'lib/lrama/states/item.rb', line 43

def end_of_rule?
  rhs.count == position
end

#hashObject

Optimization for States#setup_state



15
16
17
# File 'lib/lrama/states/item.rb', line 15

def hash
  [rule_id, position].hash
end

#new_by_next_positionObject



55
56
57
# File 'lib/lrama/states/item.rb', line 55

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

#next_next_symObject



35
36
37
# File 'lib/lrama/states/item.rb', line 35

def next_next_sym
  rhs[position + 1]
end

#next_symObject



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

def next_sym
  rhs[position]
end

#number_of_rest_symbolsObject



27
28
29
# File 'lib/lrama/states/item.rb', line 27

def number_of_rest_symbols
  rhs.count - position
end

#predecessor_item_of?(other_item) ⇒ Boolean

Returns:

  • (Boolean)


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

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

#previous_symObject



39
40
41
# File 'lib/lrama/states/item.rb', line 39

def previous_sym
  rhs[position - 1]
end

#rule_idObject



19
20
21
# File 'lib/lrama/states/item.rb', line 19

def rule_id
  rule.id
end

#start_item?Boolean

Returns:

  • (Boolean)


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

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

#symbols_after_dotObject

steep:ignore



63
64
65
# File 'lib/lrama/states/item.rb', line 63

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

#symbols_after_transitionObject



67
68
69
# File 'lib/lrama/states/item.rb', line 67

def symbols_after_transition
  rhs[position+1..-1]
end

#symbols_before_dotObject

steep:ignore



59
60
61
# File 'lib/lrama/states/item.rb', line 59

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

#to_sObject



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

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