Class: Eqn::Expression

Inherits:
EqnNode
  • Object
show all
Defined in:
lib/eqn/expression.rb

Overview

Node class for an expression.

Defined Under Namespace

Classes: ExprGroup

Instance Method Summary collapse

Methods inherited from EqnNode

#clean_tree!, #term?

Instance Method Details

#left_associative?Boolean

Returns:

  • (Boolean)


4
5
6
# File 'lib/eqn/expression.rb', line 4

def left_associative?
  elements.any? && elements.last.left_associative?
end

#value(vars = {}) ⇒ Object



8
9
10
11
12
13
14
15
16
# File 'lib/eqn/expression.rb', line 8

def value(vars = {})
  base = elements.shift.value(vars)

  # Aggressively consume left associative operators to maintain associativity.
  base = consume_while_left_associative(base, vars)

  # Apply next right-associative operator (if any) or return.
  apply_next_operator(base, vars)
end