Class: Skeem::Interpreter

Inherits:
Object
  • Object
show all
Includes:
Primitive::PrimitiveBuilder
Defined in:
lib/skeem/interpreter.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Primitive::PrimitiveBuilder

#add_primitives

Methods included from DatumDSL

#boolean, #char, #identifier, #integer, #list, #rational, #real, #string, #to_datum, #vector

Constructor Details

#initializeInterpreter

Returns a new instance of Interpreter.



18
19
20
21
22
23
24
25
26
27
# File 'lib/skeem/interpreter.rb', line 18

def initialize
  @runtime = Runtime.new(SkmFrame.new)
  @parser = Parser.new

  if block_given?
    yield self
  else
    add_default_procedures
  end
end

Instance Attribute Details

#parserSkeem::Parser (readonly)

Returns Link to Skeem parser.

Returns:



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

def parser
  @parser
end

#runtimeSkeem::Runtime (readonly)

Returns Link to runtime object (holds call stack & frames).

Returns:

  • (Skeem::Runtime)

    Link to runtime object (holds call stack & frames)



16
17
18
# File 'lib/skeem/interpreter.rb', line 16

def runtime
  @runtime
end

Instance Method Details

#add_default_proceduresObject



29
30
31
32
# File 'lib/skeem/interpreter.rb', line 29

def add_default_procedures
  add_primitives(runtime)
  add_standard(runtime)
end

#add_standard(_runtime) ⇒ Object



51
52
53
54
# File 'lib/skeem/interpreter.rb', line 51

def add_standard(_runtime)
  std_pathname = "#{File.dirname(__FILE__)}/standard/base.skm"
  load_lib(std_pathname)
end

#fetch(anIdentifier) ⇒ Object



47
48
49
# File 'lib/skeem/interpreter.rb', line 47

def fetch(anIdentifier)
  runtime.environment.fetch(anIdentifier)
end

#parse(source, _mode = nil) ⇒ Object



34
35
36
37
38
39
# File 'lib/skeem/interpreter.rb', line 34

def parse(source, _mode = nil)
  @parser ||= Parser.new
  @ptree = parser.parse(source)
  # $stderr.puts @ptree.root.inspect if _mode.nil?
  # require 'debug' unless _mode.nil?
end

#run(source, mode = nil) ⇒ Object



41
42
43
44
45
# File 'lib/skeem/interpreter.rb', line 41

def run(source, mode = nil)
  parse(source, mode)
  # require 'debug' unless mode.nil?
  @ptree.root.evaluate(runtime)
end