48 lines
1.2 KiB
Rust
48 lines
1.2 KiB
Rust
use std::io::{stdout, BufRead, BufReader};
|
|
|
|
mod cursor;
|
|
mod error;
|
|
mod node;
|
|
mod nodes;
|
|
mod parse;
|
|
mod token;
|
|
|
|
pub use cursor::*;
|
|
pub use error::*;
|
|
pub use node::*;
|
|
pub use nodes::*;
|
|
pub use parse::*;
|
|
use token::*;
|
|
|
|
pub fn parse_file(file: &str) {
|
|
let mut errors = ParserErrors::new();
|
|
let res = Module::parse_node(&mut TokenCursor::from(file), &mut errors);
|
|
println!("{:?}", res.node);
|
|
if errors.errs.is_empty() {
|
|
let module = res.node.resolve().expect("what");
|
|
}
|
|
let out = &mut stdout();
|
|
for err in errors.errs {
|
|
err.write_for(out, file).unwrap();
|
|
}
|
|
}
|
|
|
|
pub fn run_stdin() {
|
|
for line in BufReader::new(std::io::stdin()).lines() {
|
|
let mut errors = ParserErrors::new();
|
|
let str = &line.expect("failed to read line");
|
|
let mut cursor = TokenCursor::from(&str[..]);
|
|
if let Ok(expr) = Statement::parse_node(&mut cursor, &mut errors).node.as_ref() {
|
|
if cursor.next().is_none() {
|
|
println!("{:?}", expr);
|
|
} else {
|
|
println!("uhhhh ehehe");
|
|
}
|
|
}
|
|
let out = &mut stdout();
|
|
for err in errors.errs {
|
|
err.write_for(out, str).unwrap();
|
|
}
|
|
}
|
|
}
|