Module: Janeway::Interpreters::TreeConstructor

Defined in:
lib/janeway/interpreters/tree_constructor.rb

Overview

Constructs a tree of interpreter objects

Defined Under Namespace

Classes: Literal

Class Method Summary collapse

Class Method Details

.ast_node_to_interpreter(expr) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/janeway/interpreters/tree_constructor.rb', line 17

def self.ast_node_to_interpreter(expr)
  case expr
  when AST::RootNode then Interpreters::RootNodeInterpreter.new(expr)
  when AST::ArraySliceSelector then Interpreters::ArraySliceSelectorInterpreter.new(expr)
  when AST::IndexSelector then Interpreters::IndexSelectorInterpreter.new(expr)
  when AST::NameSelector then Interpreters::NameSelectorInterpreter.new(expr)
  when AST::WildcardSelector then Interpreters::WildcardSelectorInterpreter.new(expr)
  when AST::FilterSelector then Interpreters::FilterSelectorInterpreter.new(expr)
  when AST::ChildSegment then Interpreters::ChildSegmentInterpreter.new(expr)
  when AST::DescendantSegment then Interpreters::DescendantSegmentInterpreter.new(expr)
  when AST::BinaryOperator then Interpreters::BinaryOperatorInterpreter.new(expr)
  when AST::UnaryOperator then Interpreters::UnaryOperatorInterpreter.new(expr)
  when AST::CurrentNode then Interpreters::CurrentNodeInterpreter.new(expr)
  when AST::Function then Interpreters::FunctionInterpreter.new(expr)
  when AST::StringType, AST::Number, AST::Null, AST::Boolean then Literal.new expr.value
  when nil then nil # caller has no @next node
  else
    raise "Unknown AST expression: #{expr.inspect}"
  end
end