Class: Expressionist::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/expressionist/parser.rb

Instance Method Summary collapse

Constructor Details

#initialize(expression) ⇒ Parser

Returns a new instance of Parser.



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 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

Instance Method Details

#compiledObject

Raises:

  • (RuntimeError)


36
37
38
39
# 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

#executableObject

Raises:

  • (RuntimeError)


41
42
43
44
# 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

#parsedObject



27
28
29
30
31
32
33
34
# 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