Class: RLTK::CFG::Production
Overview
Oddly enough, the Production class represents a production in a context-free grammar.
Direct Known Subclasses
Instance Attribute Summary collapse
-
#id ⇒ Integer
readonly
ID of this production.
-
#lhs ⇒ Symbol
readonly
Left-hand side of this production.
-
#rhs ⇒ Array<Symbol>
readonly
Right-hand side of this production.
Instance Method Summary collapse
-
#==(other) ⇒ Boolean
Comparese on production to another.
-
#copy ⇒ Production
A new copy of this production.
-
#initialize(id, lhs, rhs) ⇒ Production
constructor
Instantiates a new Production object with the specified ID, and left- and right-hand sides.
-
#last_terminal ⇒ Symbol
The last terminal in the right-hand side of the production.
-
#to_item ⇒ Item
An Item based on this production.
-
#to_s(padding = 0) ⇒ String
Returns a string representation of this production.
Constructor Details
#initialize(id, lhs, rhs) ⇒ Production
Instantiates a new Production object with the specified ID, and left- and right-hand sides.
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
#id ⇒ Integer (readonly)
Returns ID of this production.
531 532 533 |
# File 'lib/rltk/cfg.rb', line 531 def id @id end |
#lhs ⇒ Symbol (readonly)
Returns Left-hand side of this production.
534 535 536 |
# File 'lib/rltk/cfg.rb', line 534 def lhs @lhs end |
#rhs ⇒ Array<Symbol> (readonly)
Returns 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.
557 558 559 |
# File 'lib/rltk/cfg.rb', line 557 def ==(other) self.lhs == other.lhs and self.rhs == other.rhs end |
#copy ⇒ Production
Returns A new copy of this production.
562 563 564 |
# File 'lib/rltk/cfg.rb', line 562 def copy Production.new(@id, @lhs, @rhs.clone) end |
#last_terminal ⇒ Symbol
Returns 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_item ⇒ Item
Returns 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.
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 |