Mercurial > python-compiler.rs
diff src/main.rs @ 0:211b0df72e64
Hello world!
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Sun, 29 May 2016 19:15:02 +0100 |
parents | |
children | fa7e285f88e7 |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,54 @@ +extern crate cpython; + +mod python_tb; +mod python_parse; +mod python_dump; +mod python_ast; +mod ast_convert; +mod ast_dump; +//mod ast_rewrite; +mod ast_type; + +use std::fs::File; +use std::io::Read; + +fn main() { + let filename = match std::env::args().nth(1) { + Some(filename) => filename, + None => { + // TODO: use stderr instead. + println!("USAGE: {} <filename> [filename…]", std::env::args().nth(0).unwrap()); + std::process::exit(1); + } + }; + + let code = { + let mut file = match File::open(&filename) { + Ok(file) => file, + Err(err) => { + // TODO: use stderr instead. + println!("Error while opening file “{}”: {}", filename, err); + std::process::exit(2); + } + }; + let mut code = String::new(); + file.read_to_string(&mut code).unwrap(); + code + }; + + let module = match python_parse::parse_ast(code) { + Ok(module) => module, + Err(err) => { + // TODO: use stderr instead. + println!("Error while parsing file “{}”:", filename); + python_tb::traceback(err); + std::process::exit(3); + } + }; + + //python_dump::dump_module(&module); + let module_ast = ast_convert::convert_ast("__main__".to_string(), &module); + ast_dump::dump_ast(&module_ast); + //ast_rewrite::rewrite_ast(module_ast); + ast_type::type_ast(module_ast); +}