Class: Lrama::States::Item

Inherits:
Struct
  • Object
show all
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



5
6
7
# File 'lib/lrama/states/item.rb', line 5

def position
  @position
end

#ruleObject

Returns the value of attribute rule



5
6
7
# File 'lib/lrama/states/item.rb', line 5

def rule
  @rule
end

Instance Method Details

#beginning_of_rule?Boolean



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

def beginning_of_rule?
  position == 0
end

#display_nameObject



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

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

#display_restObject

Right after position



73
74
75
76
# File 'lib/lrama/states/item.rb', line 73

def display_rest
  r = rule.rhs[position..-1].map(&:display_name).join(" ")
  ". #{r}  (rule #{rule.id})"
end

#empty_rule?Boolean



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

def empty_rule?
  rule.empty_rule?
end

#end_of_rule?Boolean



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

def end_of_rule?
  rule.rhs.count == position
end

#hashObject

Optimization for States#setup_state



7
8
9
# File 'lib/lrama/states/item.rb', line 7

def hash
  [rule.id, position].hash
end

#lhsObject



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

def lhs
  rule.lhs
end

#new_by_next_positionObject



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

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

#next_next_symObject



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

def next_next_sym
  rule.rhs[position + 1]
end

#next_symObject



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

def next_sym
  rule.rhs[position]
end

#number_of_rest_symbolsObject



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

def number_of_rest_symbols
  rule.rhs.count - position
end

#previous_symObject



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

def previous_sym
  rule.rhs[position - 1]
end

#rule_idObject



11
12
13
# File 'lib/lrama/states/item.rb', line 11

def rule_id
  rule.id
end

#start_item?Boolean



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

def start_item?
  rule.id == 0 && position == 0
end

#symbols_after_dotObject



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

def symbols_after_dot
  rule.rhs[position..-1]
end

#symbols_before_dotObject



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

def symbols_before_dot
  rule.rhs[0...position]
end

#to_sObject



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

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