Kinda repl

This commit is contained in:
Dane Johnson 2022-02-06 22:25:52 -06:00
parent 2f74e5785c
commit 7069a70d70
2 changed files with 28 additions and 3 deletions

View File

@ -1,14 +1,32 @@
mod parser;
use std::io;
use std::io::prelude::*;
use std::env;
use std::fs::File;
fn main() {
let args: Vec<String> = env::args().collect();
let mut file = File::open(&args[1]).expect("Could not read file");
fn repl() {
loop {
let mut line = String::new();
io::stdin().read_line(&mut line).unwrap();
let tree = parser::parse_stmt(&line);
println!("{:?}", tree);
}
}
fn script(filename: &str) {
let mut file = File::open(filename).expect("Could not read file");
let mut prgm = String::new();
file.read_to_string(&mut prgm).unwrap();
let tree = parser::parse(&prgm);
println!("{:?}", tree);
}
fn main() {
let args: Vec<String> = env::args().collect();
if args.len() == 1 {
repl();
} else {
script(&args[1]);
}
}

View File

@ -111,6 +111,13 @@ pub fn parse<'a>(prgm: &'a str) -> Vec<Stmt<'a>> {
deelang_parser::program(prgm).unwrap()
}
pub fn parse_stmt<'a>(stmt: &'a str) -> Stmt<'a> {
let stmt = preprocess(stmt);
let stmt = Box::new(stmt);
let stmt = Box::leak(stmt);
deelang_parser::stmt(stmt).unwrap()
}
#[cfg(test)]
mod test {