Class: Sequitur::Digram

Inherits:
Object
  • Object
show all
Defined in:
lib/sequitur/digram.rb

Overview

In linguistics, a digram is a sequence of two letters. In Sequitur, a digram is a sequence of two consecutive symbols that appear in a production rule. Each symbol in a digram can be a terminal or not.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(symbol1, symbol2, aProduction) ⇒ Digram

Constructor. A digram represents a sequence of two symbols (that appears in a rhs of a production). Terminal symbols must respond to the :hash message.

Parameters:

  • symbol1 (StringOrSymbol)

    First element of the digram

  • symbol2 (StringOrSymbol)

    Second element of the digram

  • aProduction (Production)

    Production in which the RHS the sequence symbol1 symbol2 appears.



29
30
31
32
33
# File 'lib/sequitur/digram.rb', line 29

def initialize(symbol1, symbol2, aProduction)
  @symbols = [symbol1, symbol2]
  @key = symbol1.hash.to_s(16) + ':' + symbol2.hash.to_s(16)
  @production = aProduction
end

Instance Attribute Details

#keyObject (readonly)

An unique hash key of the digram



16
17
18
# File 'lib/sequitur/digram.rb', line 16

def key
  @key
end

#productionObject (readonly)

The production in which the digram occurs



19
20
21
# File 'lib/sequitur/digram.rb', line 19

def production
  @production
end

#symbolsObject (readonly)

The sequence of two consecutive grammar symbols. The two symbols should respond to the :hash message.



13
14
15
# File 'lib/sequitur/digram.rb', line 13

def symbols
  @symbols
end

Instance Method Details

#==(other) ⇒ true/false

Equality testing. true iff keys of both digrams are equal, false otherwise

Parameters:

  • other (Digram)

    another to compare with

Returns:

  • (true/false)


39
40
41
# File 'lib/sequitur/digram.rb', line 39

def ==(other)
  return key == other.key
end

#repeating?true/false

Does the digram consists of twice the same symbols?

Returns:

  • (true/false)

    true when symbols.first == symbols.last



45
46
47
# File 'lib/sequitur/digram.rb', line 45

def repeating?
  return symbols[0] == symbols[1]
end