able-script/src/main.rs

67 lines
1.7 KiB
Rust
Raw Normal View History

2021-04-18 09:39:43 -05:00
#![forbid(unsafe_code)]
2021-06-07 14:28:24 -05:00
mod ast;
2021-04-11 13:22:59 -05:00
mod base_55;
2021-05-04 22:23:17 -05:00
mod brian;
mod error;
mod interpret;
mod lexer;
2021-04-11 15:11:23 -05:00
mod parser;
mod repl;
2021-04-13 18:01:19 -05:00
mod variables;
2021-04-11 17:22:06 -05:00
use std::process::exit;
2021-04-13 10:43:54 -05:00
use clap::{App, Arg};
use interpret::ExecEnv;
use logos::Source;
2021-04-18 09:39:43 -05:00
use parser::Parser;
2021-05-03 19:33:21 -05:00
fn main() {
2021-05-05 07:33:40 -05:00
// variables::test(); // NOTE(Able): Add this as a test case
2021-04-11 14:11:39 -05:00
let matches = App::new("AbleScript")
.version(env!("CARGO_PKG_VERSION"))
2021-04-11 11:47:35 -05:00
.author("Able <abl3theabove@gmail.com>")
.about("AbleScript interpreter")
2021-04-11 11:47:35 -05:00
.arg(
Arg::with_name("file")
.short("f")
.long("file")
.value_name("FILE")
2021-04-11 15:11:23 -05:00
.help("Set the path to interpret from")
2021-04-11 11:47:35 -05:00
.takes_value(true),
)
.get_matches();
2021-04-13 18:01:19 -05:00
2021-04-11 11:47:35 -05:00
match matches.value_of("file") {
Some(file_path) => {
// Read file
let source = match std::fs::read_to_string(file_path) {
Ok(s) => s,
Err(e) => {
println!("Failed to read file \"{}\": {}", file_path, e);
exit(1)
}
};
// Parse & evaluate
let mut parser = Parser::new(&source);
if let Err(e) = parser
.init()
.and_then(|ast| ExecEnv::new().eval_stmts(&ast))
{
println!(
"Error `{:?}` occurred at span: {:?} = `{:?}`",
e.kind,
e.span.clone(),
source.slice(e.span)
);
}
2021-04-11 11:47:35 -05:00
}
None => {
println!("Hi [AbleScript {}]", env!("CARGO_PKG_VERSION"));
repl::repl();
2021-04-11 11:47:35 -05:00
}
}
}