Class: Skeem::SkmSimpleDatum

Inherits:
SkmElement show all
Defined in:
lib/skeem/skm_simple_datum.rb

Overview

Abstract class. Root of class hierarchy needed for Interpreter design pattern

Direct Known Subclasses

SkmBoolean, SkmChar, SkmIdentifier, SkmNumber, SkmString

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from SkmElement

#boolean?, #bound!, #callable?, #char?, #complex?, #inspect, #integer?, #list?, #null?, #number?, #pair?, #procedure?, #quoted!, #rational?, #real?, #skm_eq?, #string?, #symbol?, #unquoted!, #vector?

Constructor Details

#initialize(aToken, aPosition) ⇒ SkmSimpleDatum

Returns a new instance of SkmSimpleDatum.



15
16
17
18
19
# File 'lib/skeem/skm_simple_datum.rb', line 15

def initialize(aToken, aPosition)
  super(aPosition)
  @token = aToken
  init_value(aToken.lexeme)
end

Instance Attribute Details

#tokenRley::Syntax::Token (readonly)

Returns token object corresponding to Skeem element.

Returns:

  • (Rley::Syntax::Token)

    token object corresponding to Skeem element



10
11
12
# File 'lib/skeem/skm_simple_datum.rb', line 10

def token
  @token
end

#valueObject (readonly)

Returns:

  • (Object)


13
14
15
# File 'lib/skeem/skm_simple_datum.rb', line 13

def value
  @value
end

Class Method Details

.create(aValue) ⇒ Object



21
22
23
24
25
# File 'lib/skeem/skm_simple_datum.rb', line 21

def self.create(aValue)
  lightweight = allocate
  lightweight.init_value(aValue)
  lightweight
end

Instance Method Details

#==(other) ⇒ TrueClass, FalseClass Also known as: eqv?

Equality operator. Returns true when: self and 'other' are identical, or when they have same value

Parameters:

Returns:

  • (TrueClass, FalseClass)


40
41
42
43
44
45
46
47
48
# File 'lib/skeem/skm_simple_datum.rb', line 40

def ==(other)
  return true if equal?(other)

  if other.kind_of?(SkmSimpleDatum)
    value == other.value
  else
    value == other
  end
end

#accept(aVisitor) ⇒ Object

Part of the 'visitee' role in Visitor design pattern.

Parameters:



77
78
79
# File 'lib/skeem/skm_simple_datum.rb', line 77

def accept(aVisitor)
  aVisitor.visit_simple_datum(self)
end

#done!Object



57
58
59
# File 'lib/skeem/skm_simple_datum.rb', line 57

def done!
  # Do nothing
end

#evaluate(_runtime) ⇒ Object

Evaluate the Skeem expression represented by this object. Reminder: terminals evaluate to themselves.

Parameters:



64
65
66
# File 'lib/skeem/skm_simple_datum.rb', line 64

def evaluate(_runtime)
  self
end

#init_value(aValue) ⇒ Object

This method can be overriden



82
83
84
# File 'lib/skeem/skm_simple_datum.rb', line 82

def init_value(aValue)
  @value = aValue
end

#positionObject



31
32
33
# File 'lib/skeem/skm_simple_datum.rb', line 31

def position
  token.position
end

#quasiquote(runtime) ⇒ Object

Return this object un-evaluated. Reminder: As terminals are atomic, there is no need to launch a visitor.

Parameters:



71
72
73
# File 'lib/skeem/skm_simple_datum.rb', line 71

def quasiquote(runtime)
  evaluate(runtime)
end

#symbolObject



27
28
29
# File 'lib/skeem/skm_simple_datum.rb', line 27

def symbol
  token.terminal
end

#verbatim?Boolean

Returns:

  • (Boolean)


53
54
55
# File 'lib/skeem/skm_simple_datum.rb', line 53

def verbatim?
  true
end