Sha256: c770f110bed337a720bf948445a02a987391934ab7e05afcd1fc529e823c3e39
Contents?: true
Size: 1.67 KB
Versions: 1
Compression:
Stored size: 1.67 KB
Contents
module OrigenSTIL module Processor # Evaluates an expression to a final answer class Expression < Base # Given node should be a top-level expression node, like a :time_expr def run(node, options = {}) process(node).value end def on_number_with_unit(node) val = node.find(:value).value if p = node.find(:prefix) case p.value when 'E' val = val * 1_000_000_000_000_000_000 when 'P' val = val * 1_000_000_000_000_000 when 'T' val = val * 1_000_000_000_000 when 'G' val = val * 1_000_000_000 when 'M' val = val * 1_000_000 when 'k' val = val * 1000 when 'm' val = val / 1000.0 when 'u' val = val / 1_000_000.0 when 'n' val = val / 1_000_000_000.0 when 'p' val = val / 1_000_000_000_000.0 when 'f' val = val / 1_000_000_000_000_000.0 when 'a' val = val / 1_000_000_000_000_000_000.0 else fail "Unknown number prefix #{p.value}" end end val end def on_parens(node) process_all(node.children).first end def on_multiply(node) a, b = *process_all(node.children) a * b end def on_divide(node) a, b = *process_all(node.children) a / (b * 1.0) end def on_add(node) a, b = *process_all(node.children) a + b end def on_subtract(node) a, b = *process_all(node.children) a - b end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
origen_stil-0.3.0 | lib/origen_stil/processor/expression.rb |