Class: RLTK::CFG::Production
- Inherits:
-
Object
- Object
- RLTK::CFG::Production
- Defined in:
- lib/rltk/cfg.rb
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.
575 576 577 578 579 |
# File 'lib/rltk/cfg.rb', line 575 def initialize(id, lhs, rhs) @id = id @lhs = lhs @rhs = rhs end |
Instance Attribute Details
#id ⇒ Integer (readonly)
Returns ID of this production.
561 562 563 |
# File 'lib/rltk/cfg.rb', line 561 def id @id end |
#lhs ⇒ Symbol (readonly)
Returns Left-hand side of this production.
564 565 566 |
# File 'lib/rltk/cfg.rb', line 564 def lhs @lhs end |
#rhs ⇒ Array<Symbol> (readonly)
Returns Right-hand side of this production.
567 568 569 |
# File 'lib/rltk/cfg.rb', line 567 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.
587 588 589 |
# File 'lib/rltk/cfg.rb', line 587 def ==(other) self.lhs == other.lhs and self.rhs == other.rhs end |
#copy ⇒ Production
Returns A new copy of this production.
592 593 594 |
# File 'lib/rltk/cfg.rb', line 592 def copy Production.new(@id, @lhs, @rhs.clone) end |
#last_terminal ⇒ Symbol
Returns The last terminal in the right-hand side of the production.
597 598 599 |
# File 'lib/rltk/cfg.rb', line 597 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.
602 603 604 |
# File 'lib/rltk/cfg.rb', line 602 def to_item Item.new(0, @id, @lhs, @rhs) end |
#to_s(padding = 0) ⇒ String
Returns a string representation of this production.
611 612 613 |
# File 'lib/rltk/cfg.rb', line 611 def to_s(padding = 0) "#{format("%-#{padding}s", @lhs)} -> #{@rhs.empty? ? 'ɛ' : @rhs.map { |s| s.to_s }.join(' ')}" end |