Mercurial > python-compiler.rs
annotate src/main.rs @ 25:86604a156ed0
Rename tests_convert_dump to test_parse_files.
author | Bastien Orivel <eijebong@bananium.fr> |
---|---|
date | Fri, 03 Jun 2016 23:35:38 +0200 |
parents | 5a7c3393382b |
children | d255a932553f |
rev | line source |
---|---|
0 | 1 extern crate cpython; |
2 | |
23
5a7c3393382b
Add a simple test for ast.Assign.
Bastien Orivel <eijebong@bananium.fr>
parents:
22
diff
changeset
|
3 #[cfg="test"] |
5a7c3393382b
Add a simple test for ast.Assign.
Bastien Orivel <eijebong@bananium.fr>
parents:
22
diff
changeset
|
4 mod tests; |
5a7c3393382b
Add a simple test for ast.Assign.
Bastien Orivel <eijebong@bananium.fr>
parents:
22
diff
changeset
|
5 |
0 | 6 mod python_tb; |
7 mod python_parse; | |
8 mod python_dump; | |
9 mod python_ast; | |
10 mod ast_convert; | |
11 mod ast_dump; | |
13
38b0d63697b1
Import the full AST grammar from CPython 3.5.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
9
diff
changeset
|
12 //mod ast_scope; |
0 | 13 //mod ast_rewrite; |
9
fa7e285f88e7
Add a scoping pass, associating each module/statement with a block.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
0
diff
changeset
|
14 //mod ast_type; |
0 | 15 |
16 use std::fs::File; | |
17 use std::io::Read; | |
18 | |
19 fn main() { | |
20 let filename = match std::env::args().nth(1) { | |
21 Some(filename) => filename, | |
22 None => { | |
23 // TODO: use stderr instead. | |
24 println!("USAGE: {} <filename> [filename…]", std::env::args().nth(0).unwrap()); | |
25 std::process::exit(1); | |
26 } | |
27 }; | |
28 | |
29 let code = { | |
30 let mut file = match File::open(&filename) { | |
31 Ok(file) => file, | |
32 Err(err) => { | |
33 // TODO: use stderr instead. | |
34 println!("Error while opening file “{}”: {}", filename, err); | |
35 std::process::exit(2); | |
36 } | |
37 }; | |
38 let mut code = String::new(); | |
39 file.read_to_string(&mut code).unwrap(); | |
40 code | |
41 }; | |
42 | |
43 let module = match python_parse::parse_ast(code) { | |
44 Ok(module) => module, | |
45 Err(err) => { | |
46 // TODO: use stderr instead. | |
47 println!("Error while parsing file “{}”:", filename); | |
48 python_tb::traceback(err); | |
49 std::process::exit(3); | |
50 } | |
51 }; | |
52 | |
53 //python_dump::dump_module(&module); | |
54 let module_ast = ast_convert::convert_ast("__main__".to_string(), &module); | |
22
25b202005d1d
Return a String from ast_dump instead of printing it directly.
Bastien Orivel <eijebong@bananium.fr>
parents:
13
diff
changeset
|
55 println!("{}", ast_dump::dump_ast(&module_ast)); |
13
38b0d63697b1
Import the full AST grammar from CPython 3.5.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
9
diff
changeset
|
56 //let scoped_ast = ast_scope::scope_ast(vec!(module_ast)); |
38b0d63697b1
Import the full AST grammar from CPython 3.5.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
9
diff
changeset
|
57 //println!("{:#?}", scoped_ast); |
38b0d63697b1
Import the full AST grammar from CPython 3.5.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
9
diff
changeset
|
58 //let new_scoped_ast = ast_scope::check_scoping(scoped_ast); |
38b0d63697b1
Import the full AST grammar from CPython 3.5.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
9
diff
changeset
|
59 //println!("{:#?}", new_scoped_ast); |
0 | 60 //ast_rewrite::rewrite_ast(module_ast); |
9
fa7e285f88e7
Add a scoping pass, associating each module/statement with a block.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
0
diff
changeset
|
61 //ast_type::type_ast(scoped_ast); |
0 | 62 } |