Sha256: 40ce33faa20cfb06773df87cd0217c650f9753dd21d46c520dfa33a577b200fd

Contents?: true

Size: 875 Bytes

Versions: 3

Compression:

Stored size: 875 Bytes

Contents

module Hesabu
  class Interpreter < Parslet::Transform
    rule(plist: sequence(:arr)) { arr }
    rule(plist: "()") { [] }
    rule(l: simple(:left),
         r: simple(:right),
         o: simple(:op)) do
      Hesabu::Types::Operation.new(left, op, right)
    end
    rule(identifier: simple(:id)) { id.to_s }
    rule(variable: simple(:variable)) do |d|
      d[:var_identifiers]&.add(d[:variable])
      Hesabu::Types::IdentifierLit.new(d[:variable], d[:doc])
    end
    rule(fcall: { name: simple(:name), varlist: sequence(:vars) }) do
      Hesabu::Types::FunCall.new(name, vars)
    end
    rule(str: subtree(:str)) do
      Hesabu::Types::StringLit.new(str.map { |char| char.values.first.str }.join)
    end

    rule(integer: simple(:integer)) { Hesabu::Types::IntLit.new(integer) }
    rule(float: simple(:float)) { Hesabu::Types::FloatLit.new(float) }
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
hesabu-0.1.5 lib/hesabu/interpreter.rb
hesabu-0.1.4 lib/hesabu/interpreter.rb
hesabu-0.1.3 lib/hesabu/interpreter.rb