Class: Mxrb::Runtime::Native::Expression::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/mxrb/runtime/native.rb

Overview

Recursive-descent parser for the expression subset used by native microflows. It deliberately accepts syntax, not arbitrary Ruby code.

Constant Summary collapse

COMPARISONS =
{
  '=' => ->(left, right) { left == right },
  '!=' => ->(left, right) { left != right },
  '>' => ->(left, right) { left > right },
  '<' => ->(left, right) { left < right },
  '>=' => ->(left, right) { left >= right },
  '<=' => ->(left, right) { left <= right }
}.freeze

Instance Method Summary collapse

Constructor Details

#initialize(tokens, expression, variables, node) ⇒ Parser

Returns a new instance of Parser.



289
290
291
292
293
294
295
296
# File 'lib/mxrb/runtime/native.rb', line 289

def initialize(tokens, expression, variables, node)
  @tokens = tokens
  @index = 0
  @expression = expression
  @variables = variables
  @node = node
  advance
end

Instance Method Details

#parseObject

Raises:

  • (ArgumentError)


298
299
300
301
302
303
# File 'lib/mxrb/runtime/native.rb', line 298

def parse
  value = parse_or
  raise ArgumentError unless @token == :eof

  value
end