Class: RLTK::CFG::Production

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

Overview

Oddly enough, the Production class represents a production in a context-free grammar.

Direct Known Subclasses

Item

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(id, lhs, rhs) ⇒ Production

Instantiates a new Production object with the specified ID, and left- and right-hand sides.

Parameters:

  • id (Integer)

    ID number of this production.

  • lhs (Symbol)

    Left-hand side of the production.

  • rhs (Array<Symbol>)

    Right-hand side of the production.



545
546
547
548
549
# File 'lib/rltk/cfg.rb', line 545

def initialize(id, lhs, rhs)
	@id	= id
	@lhs	= lhs
	@rhs	= rhs
end

Instance Attribute Details

#idInteger (readonly)

Returns ID of this production.

Returns:

  • (Integer)

    ID of this production.



531
532
533
# File 'lib/rltk/cfg.rb', line 531

def id
  @id
end

#lhsSymbol (readonly)

Returns Left-hand side of this production.

Returns:

  • (Symbol)

    Left-hand side of this production.



534
535
536
# File 'lib/rltk/cfg.rb', line 534

def lhs
  @lhs
end

#rhsArray<Symbol> (readonly)

Returns Right-hand side of this production.

Returns:

  • (Array<Symbol>)

    Right-hand side of this production.



537
538
539
# File 'lib/rltk/cfg.rb', line 537

def rhs
  @rhs
end

Instance Method Details

#==(other) ⇒ Boolean

Comparese on production to another. Returns true only if the left- and right- hand sides match.

Parameters:

  • other (Production)

    Another production to compare to.

Returns:

  • (Boolean)


557
558
559
# File 'lib/rltk/cfg.rb', line 557

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

#copyProduction

Returns A new copy of this production.

Returns:



562
563
564
# File 'lib/rltk/cfg.rb', line 562

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

#last_terminalSymbol

Returns The last terminal in the right-hand side of the production.

Returns:

  • (Symbol)

    The last terminal in the right-hand side of the production.



567
568
569
# File 'lib/rltk/cfg.rb', line 567

def last_terminal
	@rhs.inject(nil) { |m, sym| if CFG::is_terminal?(sym) then sym else m end }
end

#to_itemItem

Returns An Item based on this production.

Returns:

  • (Item)

    An Item based on this production.



572
573
574
# File 'lib/rltk/cfg.rb', line 572

def to_item
	Item.new(0, @id, @lhs, @rhs)
end

#to_s(padding = 0) ⇒ String

Returns a string representation of this production.

Parameters:

  • padding (Integer) (defaults to: 0)

    The ammount of padding spaces to add to the beginning of the string.

Returns:

  • (String)


581
582
583
# File 'lib/rltk/cfg.rb', line 581

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