bin/p-lang in p-lang-0.1.1 vs bin/p-lang in p-lang-0.2.0
- old
+ new
@@ -1,17 +1,45 @@
#!/usr/bin/env ruby
+require 'optparse'
+
require File.join(File.expand_path(File.dirname(__FILE__)), '/../lib/p-lang')
-if ARGV[0]
- @parser = PLangParser.new
-
- ast = @parser.parse(File.readlines(ARGV[0]).join(""))
+options = OptionParser.new do|opts|
+ opts.banner = "Usage: p-lang [option]"
+ opts.version = "0.2.0"
- if ast
- vm = PLang::VM.new(ast.build.collect(&:to_sexp))
-
+ opts.on("-e", "-e 'COMMAND'", "interp one line of script.") do |command|
+ sa = PLang::Parser::SyntaxAnalyser.new(command)
+ vm = PLang::VM::Interpreter.new(sa.parse)
vm.execute!
+ end
+
+ opts.on("-i", "-i FILE", "interp a script file.") do |file|
+ begin
+ program = File.readlines(file).join("")
+ rescue
+ puts "No such file (LoadError)"
+ exit
+ end
+ begin
+ sa = PLang::Parser::SyntaxAnalyser.new program
+ vm = PLang::VM::Interpreter.new(sa.parse)
+ vm.execute!
+ rescue Exception => e
+ puts "#{file}:#{e}"
+ end
+ end
+end
+
+argv = ARGV
+begin
+ if ARGV.length > 0
+ if options.parse!(ARGV).length > 0
+ options.parse!(["-h"])
+ end
else
- puts @parser.failure_reason
+ options.parse!(["-h"])
end
+rescue
+ puts "p-lang: unrecognized option"
end