Class: Kanocc::ItemSet
- Inherits:
-
Object
- Object
- Kanocc::ItemSet
- Defined in:
- lib/kanocc/earley.rb
Instance Method Summary collapse
- #add(rule, dot, j, n, prev_pos) ⇒ Object
- #find(rule, dot, j, n) ⇒ Object
- #find_all_by_n(n) ⇒ Object
- #full_items_by_lhs_j_and_n(lhs, j, n) ⇒ Object
-
#initialize ⇒ ItemSet
constructor
FIXME Optimize all this.
- #items_at_n(n) ⇒ Object
- #items_n_and_symbol_after_dot(n, symbol) ⇒ Object
- #number_at_n(n) ⇒ Object
- #prepare_for_n(n) ⇒ Object
Constructor Details
#initialize ⇒ ItemSet
FIXME Optimize all this
299 300 301 302 303 |
# File 'lib/kanocc/earley.rb', line 299 def initialize @item_lists = [] @items_n_and_symbol_after_dot = {} @items_rule_dot_j_n = {} end |
Instance Method Details
#add(rule, dot, j, n, prev_pos) ⇒ Object
309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 |
# File 'lib/kanocc/earley.rb', line 309 def add(rule, dot, j, n, prev_pos) if item = @items_rule_dot_j_n[[rule,dot,j,n]] item.set_prev_pos(prev_pos) else item = Item.new(rule, dot, j, n, prev_pos, prev_pos) @items_rule_dot_j_n[[rule,dot,j,n]] = item @item_lists[item.n] = [] unless @item_lists[item.n] @item_lists[item.n] << item if item.symbol_after_dot unless @items_n_and_symbol_after_dot[[item.n, item.symbol_after_dot]] @items_n_and_symbol_after_dot[[item.n, item.symbol_after_dot]] = [] end @items_n_and_symbol_after_dot[[item.n, item.symbol_after_dot]] << item end end end |
#find(rule, dot, j, n) ⇒ Object
327 328 329 |
# File 'lib/kanocc/earley.rb', line 327 def find(rule, dot, j, n) @items_rule_dot_j_n[[rule, dot, j,n]] end |
#find_all_by_n(n) ⇒ Object
331 332 333 |
# File 'lib/kanocc/earley.rb', line 331 def find_all_by_n(n) @item_lists[n].clone end |
#full_items_by_lhs_j_and_n(lhs, j, n) ⇒ Object
343 344 345 346 347 348 349 |
# File 'lib/kanocc/earley.rb', line 343 def full_items_by_lhs_j_and_n(lhs, j, n) @item_lists[n].find_all do |item| item.dot >= item.rule.rhs.size and item.j == j and item.rule.lhs == lhs end end |
#items_at_n(n) ⇒ Object
351 352 353 |
# File 'lib/kanocc/earley.rb', line 351 def items_at_n(n) return @item_lists[n].clone end |
#items_n_and_symbol_after_dot(n, symbol) ⇒ Object
339 340 341 |
# File 'lib/kanocc/earley.rb', line 339 def items_n_and_symbol_after_dot(n, symbol) return @items_n_and_symbol_after_dot[[n, symbol]] || [] end |
#number_at_n(n) ⇒ Object
335 336 337 |
# File 'lib/kanocc/earley.rb', line 335 def number_at_n(n) @item_lists[n].length end |
#prepare_for_n(n) ⇒ Object
305 306 307 |
# File 'lib/kanocc/earley.rb', line 305 def prepare_for_n(n) @item_lists[n] = [] end |