Sha256: 2ff053c8dfb2bea765c59f8faa3a584b86174ef6952d5cb2e16993da84a15d42

Contents?: true

Size: 1.65 KB

Versions: 2

Compression:

Stored size: 1.65 KB

Contents

#!/usr/bin/env ruby

require "razyk"
require "optparse"

module RazyK
  class Application
    def initialize
      @program = nil
      @step = false
      @web_server = false
      @optparse = option_parser
    end

    def option_parser
      OptionParser.new do |opt|
        opt.on("-e 'program'",
               "specify LazyK program string. Omit [programfile]") do |prog|
          @program = prog
        end
        opt.on("-s", "--step", "step execution. Dump combinator tree by each step") do
          @step = true
        end
        opt.on("--server [PORT]", "start web server") do |port|
          @port = Integer(port || 9292)
          @step = true
          @web_server = true
        end
      end
    end
    private :option_parser

    def run(argv)
      @optparse.parse!(argv)

      if @web_server
        require "razyk/webapp"
        app = RazyK::WebApp.new
        # This should work, but rack-1.2.1 fails. :app don't overwrite config.ru
        #Rack::Server.start(:app => app, :Port => @port)
        trap(:INT) do
          if Rack::Handler::WEBrick.respond_to?(:shutdown)
            Rack::Handler::WEBrick.shutdown
          else
            exit
          end
        end
        Rack::Handler::WEBrick.run(app, :Port => @port)
        return
      end

      if @program.nil?
        if argv.empty?
          raise "please specify LazyK program file"
        end
        filepath = argv.shift
        @program = IO.read(filepath)
      end

      if @step
        RazyK.run(@program) do |vm|
          $stderr.puts vm.tree.inspect
        end
      else
        RazyK.run(@program)
      end
    end
  end
end

app = RazyK::Application.new
app.run(ARGV)

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
razyk-0.0.1 bin/razyk
razyk-0.0.0 bin/razyk