Class: Lrama::States::Item
- Inherits:
-
Struct
- Object
- Struct
- Lrama::States::Item
- Extended by:
- Forwardable
- 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.
- #new_by_next_position ⇒ Object
- #next_next_sym ⇒ Object
- #next_sym ⇒ Object
- #number_of_rest_symbols ⇒ Object
- #predecessor_item_of?(other_item) ⇒ Boolean
- #previous_sym ⇒ Object
- #rule_id ⇒ Object
- #start_item? ⇒ Boolean
-
#symbols_after_dot ⇒ Object
steep:ignore.
- #symbols_after_transition ⇒ Object
-
#symbols_before_dot ⇒ Object
steep:ignore.
- #to_s ⇒ Object
Instance Attribute Details
#position ⇒ Object
Returns the value of attribute position
9 10 11 |
# File 'lib/lrama/states/item.rb', line 9 def position @position end |
#rule ⇒ Object
Returns the value of attribute rule
9 10 11 |
# File 'lib/lrama/states/item.rb', line 9 def rule @rule end |
Instance Method Details
#beginning_of_rule? ⇒ Boolean
47 48 49 |
# File 'lib/lrama/states/item.rb', line 47 def beginning_of_rule? position == 0 end |
#display_name ⇒ Object
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_rest ⇒ Object
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
23 24 25 |
# File 'lib/lrama/states/item.rb', line 23 def empty_rule? rule.empty_rule? end |
#end_of_rule? ⇒ Boolean
43 44 45 |
# File 'lib/lrama/states/item.rb', line 43 def end_of_rule? rhs.count == position end |
#hash ⇒ Object
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_position ⇒ Object
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_sym ⇒ Object
35 36 37 |
# File 'lib/lrama/states/item.rb', line 35 def next_next_sym rhs[position + 1] end |
#next_sym ⇒ Object
31 32 33 |
# File 'lib/lrama/states/item.rb', line 31 def next_sym rhs[position] end |
#number_of_rest_symbols ⇒ Object
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
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_sym ⇒ Object
39 40 41 |
# File 'lib/lrama/states/item.rb', line 39 def previous_sym rhs[position - 1] end |
#rule_id ⇒ Object
19 20 21 |
# File 'lib/lrama/states/item.rb', line 19 def rule_id rule.id end |
#start_item? ⇒ Boolean
51 52 53 |
# File 'lib/lrama/states/item.rb', line 51 def start_item? rule.initial_rule? && beginning_of_rule? end |
#symbols_after_dot ⇒ Object
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_transition ⇒ Object
67 68 69 |
# File 'lib/lrama/states/item.rb', line 67 def symbols_after_transition rhs[position+1..-1] end |
#symbols_before_dot ⇒ Object
steep:ignore
59 60 61 |
# File 'lib/lrama/states/item.rb', line 59 def symbols_before_dot # steep:ignore rhs[0...position] end |
#to_s ⇒ Object
71 72 73 |
# File 'lib/lrama/states/item.rb', line 71 def to_s "#{lhs.id.s_value}: #{display_name}" end |