2019-08-30 19:58:20 +00:00
|
|
|
use crate::{lexer::Lexer, parser::Program};
|
2019-02-05 08:57:20 +00:00
|
|
|
use std::io::{self, BufRead, Write};
|
|
|
|
|
2019-09-12 17:19:57 +00:00
|
|
|
const PROMPT: &str = ">> ";
|
2019-02-05 08:57:20 +00:00
|
|
|
|
|
|
|
pub fn init() {
|
|
|
|
let stdin = io::stdin();
|
|
|
|
let read_handle = stdin.lock();
|
|
|
|
let stdout = io::stdout();
|
|
|
|
let write_handle = stdout.lock();
|
|
|
|
|
|
|
|
start(read_handle, write_handle);
|
|
|
|
}
|
|
|
|
|
|
|
|
fn start<R: BufRead, W: Write>(mut ip: R, mut out: W) {
|
|
|
|
loop {
|
2019-09-12 17:19:57 +00:00
|
|
|
out.write_all(PROMPT.as_bytes()).unwrap();
|
2019-02-05 08:57:20 +00:00
|
|
|
out.flush().unwrap();
|
|
|
|
let mut s = String::new();
|
|
|
|
ip.read_line(&mut s).unwrap();
|
|
|
|
let tokens = Lexer::new(&s);
|
|
|
|
|
2019-04-14 11:15:40 +00:00
|
|
|
for token in tokens.clone() {
|
2019-02-05 08:57:20 +00:00
|
|
|
println!("{:?}", token);
|
|
|
|
}
|
2019-04-14 11:15:40 +00:00
|
|
|
|
2019-09-12 17:19:57 +00:00
|
|
|
let parser = Program::parse(tokens);
|
|
|
|
println!("parser={:?}", parser);
|
2019-02-05 08:57:20 +00:00
|
|
|
}
|
|
|
|
}
|