Class: Skeem::Interpreter
Instance Attribute Summary collapse
Instance Method Summary
collapse
#add_primitives
Methods included from DatumDSL
#boolean, #char, #identifier, #integer, #list, #rational, #real, #string, #to_datum, #vector
Constructor Details
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
Returns Link to Skeem parser.
13
14
15
|
# File 'lib/skeem/interpreter.rb', line 13
def parser
@parser
end
|
Returns 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_procedures ⇒ Object
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)
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)
@ptree.root.evaluate(runtime)
end
|