Class: RLTK::CFG::Item

Inherits:
Production show all
Defined in:
lib/rltk/cfg.rb

Overview

The Item class represents a CFG production with dot in it.

Instance Attribute Summary collapse

Attributes inherited from Production

#id, #lhs, #rhs

Instance Method Summary collapse

Methods inherited from Production

#last_terminal, #to_item

Constructor Details

#initialize(dot, *args) ⇒ Item

Instantiates a new Item object with a dot located before the symbol at index dot of the right-hand side. The remaining arguments (args) should be as specified by Production#initialize.



628
629
630
631
632
633
# File 'lib/rltk/cfg.rb', line 628

def initialize(dot, *args)
	super(*args)

	# The Dot indicates the NEXT symbol to be read.
	@dot = dot
end

Instance Attribute Details

#dotInteger (readonly)



619
620
621
# File 'lib/rltk/cfg.rb', line 619

def dot
  @dot
end

Instance Method Details

#==(other) ⇒ Boolean

Compares two items.



640
641
642
# File 'lib/rltk/cfg.rb', line 640

def ==(other)
	self.dot == other.dot and self.lhs == other.lhs and self.rhs == other.rhs
end

#advanceInteger?

Moves the items dot forward by one if the end of the right-hand side hasn’t already been reached.



648
649
650
651
652
# File 'lib/rltk/cfg.rb', line 648

def advance
	if @dot < @rhs.length
		@dot += 1
	end
end

#at_end?Boolean

Tests to see if the dot is at the end of the right-hand side.



657
658
659
# File 'lib/rltk/cfg.rb', line 657

def at_end?
	@dot == @rhs.length
end

#copyItem



662
663
664
# File 'lib/rltk/cfg.rb', line 662

def copy
	Item.new(@dot, @id, @lhs, @rhs.clone)
end

#next_symbolSymbol

Returns the symbol located after the dot.



669
670
671
# File 'lib/rltk/cfg.rb', line 669

def next_symbol
	@rhs[@dot]
end

#to_s(padding = 0) ⇒ String

Returns a string representation of this item.



678
679
680
# File 'lib/rltk/cfg.rb', line 678

def to_s(padding = 0)
	"#{format("%-#{padding}s", @lhs)} -> #{@rhs.map { |s| s.to_s }.insert(@dot, '·').join(' ') }"
end