Class: Lrama::States::Item
- Inherits:
-
Struct
- Object
- Struct
- Lrama::States::Item
- Defined in:
- lib/lrama/states/item.rb
Instance Attribute Summary collapse
-
#position ⇒ Object
Returns the value of attribute position.
-
#rule ⇒ Object
Returns the value of attribute rule.
Instance Method Summary collapse
- #beginning_of_rule? ⇒ Boolean
- #display_name ⇒ Object
-
#display_rest ⇒ Object
Right after position.
- #empty_rule? ⇒ Boolean
- #end_of_rule? ⇒ Boolean
-
#hash ⇒ Object
Optimization for States#setup_state.
- #lhs ⇒ Object
- #new_by_next_position ⇒ Object
- #next_next_sym ⇒ Object
- #next_sym ⇒ Object
- #number_of_rest_symbols ⇒ Object
- #previous_sym ⇒ Object
- #rule_id ⇒ Object
- #start_item? ⇒ Boolean
- #symbols_after_dot ⇒ Object
- #symbols_before_dot ⇒ Object
- #to_s ⇒ Object
Instance Attribute Details
#position ⇒ Object
Returns the value of attribute position
5 6 7 |
# File 'lib/lrama/states/item.rb', line 5 def position @position end |
#rule ⇒ Object
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_name ⇒ Object
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_rest ⇒ Object
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 |
#hash ⇒ Object
Optimization for States#setup_state
7 8 9 |
# File 'lib/lrama/states/item.rb', line 7 def hash [rule.id, position].hash end |
#lhs ⇒ Object
23 24 25 |
# File 'lib/lrama/states/item.rb', line 23 def lhs rule.lhs end |
#new_by_next_position ⇒ Object
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_sym ⇒ Object
31 32 33 |
# File 'lib/lrama/states/item.rb', line 31 def next_next_sym rule.rhs[position + 1] end |
#next_sym ⇒ Object
27 28 29 |
# File 'lib/lrama/states/item.rb', line 27 def next_sym rule.rhs[position] end |
#number_of_rest_symbols ⇒ Object
19 20 21 |
# File 'lib/lrama/states/item.rb', line 19 def number_of_rest_symbols rule.rhs.count - position end |
#previous_sym ⇒ Object
35 36 37 |
# File 'lib/lrama/states/item.rb', line 35 def previous_sym rule.rhs[position - 1] end |
#rule_id ⇒ Object
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_dot ⇒ Object
59 60 61 |
# File 'lib/lrama/states/item.rb', line 59 def symbols_after_dot rule.rhs[position..-1] end |
#symbols_before_dot ⇒ Object
55 56 57 |
# File 'lib/lrama/states/item.rb', line 55 def symbols_before_dot rule.rhs[0...position] end |
#to_s ⇒ Object
63 64 65 |
# File 'lib/lrama/states/item.rb', line 63 def to_s "#{lhs.id.s_value}: #{display_name}" end |