prexcl 0.0.10

Prexcl is an esoteric proof-of-concept programming language.
Documentation
extern crate prexcl;

fn main() {
  let mut args = std::env::args();
  let _self_name = args.next();
  let prog_name = args.next();
  let program = if let Some(x) = prog_name {
    use std::error::Error;
    use std::fs::File;
    use std::io::prelude::*;
    use std::path::Path;
    let path = Path::new(&x);
    let display = path.display();
    let mut file = match File::open(&path) {
      Err(why) => panic!("couldn't open {}: {}", display, why.description()),
      Ok(file) => file,
    };
    let mut s = String::new();
    match file.read_to_string(&mut s) {
        Err(why) => panic!("couldn't read {}: {}", display, why.description()),
        Ok(_) => s,
    }
  } else {
    panic!("usage: prexcl <filename>")
  };
  let mut state = prexcl::State::new();
  {
    use prexcl::commands::*;
    state.register_command(Return);
    state.register_command(Loop);
    state.register_command(Nop);
    state.register_command(Println);
    state.register_command(Load);
    state.register_command(Store);
    state.register_command(Exec);
  }
  let parsed_program = state.parse(program.chars());
  println!("{:?}", parsed_program);
  state.call(&parsed_program);
}