class Expressionist::Parser

Public Class Methods

new(expression) click to toggle source
# File lib/expressionist/parser.rb, line 10
def initialize(expression)
  @parsed = nil
  @compiled = nil
  @executable = nil

  case expression
  when String
    @expression = expression
  when Function
    @compiled   = expression
  when Array
    @executable = expression
  else
    raise ArgumentError, "Unknown expression type: #{expression}"
  end
end

Public Instance Methods

compiled() click to toggle source
# File lib/expressionist/parser.rb, line 36
def compiled
  raise RuntimeError, 'Raw nor compiled form was passed' unless @compiled || parsed
  @compiled ||= Transformer.new.apply(parsed)
end
executable() click to toggle source
# File lib/expressionist/parser.rb, line 41
def executable
  raise RuntimeError, 'Compiled nor executable form was passed' unless @executable || compiled
  @executable ||= compiled.to_a
end
parsed() click to toggle source
# File lib/expressionist/parser.rb, line 27
def parsed
  raise RuntimeError, 'Expression was not passed' unless @expression
  @parsed ||= Grammar.new.parse(@expression)
rescue Parslet::ParseFailed => e
  # puts expression
  # puts e.parse_failure_cause.ascii_tree
  raise ArgumentError, "Invalid expression: #{@expression}"
end