Sha256: 044ed055dc1248c51e582e91d31daeb7425fbfb5d34e8d025a51c52cfaeeedd3
Contents?: true
Size: 1.42 KB
Versions: 4
Compression:
Stored size: 1.42 KB
Contents
#!/usr/bin/env ruby # frozen_string_literal: true require "readline" require "rubasteme" def usage puts <<HELP usage: sicp_scheme [option] option: -v, --version : print version -h, --help : show this message HELP end module SicpScheme require_relative "sicp_scheme/error" require_relative "sicp_scheme/environment" require_relative "sicp_scheme/primitives" require_relative "sicp_scheme/evaluator" require_relative "sicp_scheme/printer" TOPLEVEL_ENV = Environment.empty_environment def self.repl(prompt) env = TOPLEVEL_ENV parser = Rubasteme::Parser.new evaluator = Evaluator.new printer = Printer.new msg = loop { source = Readline::readline(prompt, true) break "Bye!" if source.nil? case source when /\(load\s+"(.*)"\)/, /\(load-scm\s+"(.*)"\)/ file = Regexp.last_match[1] source = File.readlines(file, chomp: true).join(" ") when /\(version\)/ puts evaluator.version puts "(Rubasteme :version #{Rubasteme::VERSION} :release #{Rubasteme::RELEASE})" puts "(Rbscmlex :version #{Rbscmlex::VERSION} :release #{Rbscmlex::RELEASE})" next end lexer = Rbscmlex::Lexer.new(source, form: :token) exp = parser.parse(lexer).to_a result = evaluator.eval(exp, env) printer.print(result) } msg end end prompt = "SICP Scheme> " msg = SicpScheme.repl(prompt) puts msg unless msg.nil?
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
rubasteme-0.1.4 | examples/mini_sicp_scheme |
rubasteme-0.1.3 | examples/mini_sicp_scheme |
rubasteme-0.1.2 | examples/mini_sicp_scheme |
rubasteme-0.1.1 | examples/mini_sicp_scheme |