main.rs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. //#![feature(plugin)]
  2. //#![plugin(dynasm)]
  3. #![feature(proc_macro_hygiene)]
  4. #[macro_use]
  5. extern crate dynasm;
  6. extern crate winapi;
  7. extern crate typed_arena;
  8. use std::io::{self, Read};
  9. use std::fs::File;
  10. use std::env;
  11. pub mod ir;
  12. pub mod parser;
  13. pub mod interpret;
  14. pub mod optimize;
  15. pub mod compile;
  16. pub mod formatter;
  17. pub mod trans;
  18. use crate::ir::MutVisitor;
  19. fn main() -> io::Result<()> {
  20. let args: Vec<String> = env::args().collect();
  21. let mut buffer = String::new();
  22. if args.len() > 1 {
  23. File::open(&args[1])?.read_to_string(&mut buffer)?;
  24. }
  25. else {
  26. io::stdin().read_to_string(&mut buffer)?;
  27. }
  28. let insts = parser::parse(&buffer);
  29. if let Ok(mut insts) = insts {
  30. let mut lin_loop_optimizer = optimize::LinOptimizer::new();
  31. lin_loop_optimizer.visit_instructions(&mut insts);
  32. std::mem::replace(&mut insts, lin_loop_optimizer.instructions);
  33. //for ref inst in &insts {
  34. //println!("{}\n", inst.to_string());
  35. //}
  36. //println!("{}", trans::java::transpile(&insts));
  37. let _code = compile::compile(&insts);
  38. }
  39. else if let Err(msg) = insts {
  40. println!("error parsing: {}", msg);
  41. }
  42. Ok(())
  43. }