From cd69ebaa9df261289cf9efccda0a306f1903a107 Mon Sep 17 00:00:00 2001 From: greg Date: Thu, 3 Mar 2016 22:18:16 -0800 Subject: [PATCH] Split main() into subfunctions --- src/main.rs | 63 +++++++++++++++++++++++++++++------------------------ 1 file changed, 35 insertions(+), 28 deletions(-) diff --git a/src/main.rs b/src/main.rs index a3b7a07..529320d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -21,38 +21,45 @@ mod eval; fn main() { let args: Vec = std::env::args().collect(); if let Some(filename) = args.get(1) { - let mut source_file = File::open(&Path::new(filename)).unwrap(); - let mut buffer = String::new(); - source_file.read_to_string(&mut buffer).unwrap(); - - let tokens = match tokenize(&buffer) { - Some(t) => t, - None => { println!("Tokenization error"); return; } - }; - - let ast = match parse(&tokens, &[]) { - Ok(ast) => ast, - Err(err) => { println!("Parse error: {:?}", err); return; } - }; - - let mut evaluator = Evaluator::new(); - let results = evaluator.run(ast); - for result in results.iter() { - println!("{}", result); - } - + run_noninteractive(filename); } else { - println!("Schala v 0.02"); - let initial_state = InterpreterState { - show_tokens: false, - show_parse: false, - evaluator: Evaluator::new(), - }; - REPL::with_prompt_and_state(Box::new(repl_handler), ">> ", initial_state) - .run(); + run_repl(); } } +fn run_noninteractive(filename: &String) { + let mut source_file = File::open(&Path::new(filename)).unwrap(); + let mut buffer = String::new(); + source_file.read_to_string(&mut buffer).unwrap(); + + let tokens = match tokenize(&buffer) { + Some(t) => t, + None => { println!("Tokenization error"); return; } + }; + + let ast = match parse(&tokens, &[]) { + Ok(ast) => ast, + Err(err) => { println!("Parse error: {:?}", err); return; } + }; + + let mut evaluator = Evaluator::new(); + let results = evaluator.run(ast); + for result in results.iter() { + println!("{}", result); + } +} + +fn run_repl() { + println!("Schala v 0.02"); + let initial_state = InterpreterState { + show_tokens: false, + show_parse: false, + evaluator: Evaluator::new(), + }; + REPL::with_prompt_and_state(Box::new(repl_handler), ">> ", initial_state) + .run(); +} + struct InterpreterState { show_tokens: bool, show_parse: bool,