2020-02-03 17:56:32 -05:00
|
|
|
#![allow(dead_code)]
|
|
|
|
|
|
2020-01-25 19:17:39 -05:00
|
|
|
mod common;
|
|
|
|
|
mod vm;
|
|
|
|
|
|
2020-02-17 16:15:06 -05:00
|
|
|
use std::{env, fs, io, process};
|
2020-01-27 19:07:57 -05:00
|
|
|
|
|
|
|
|
type Result<T> = std::result::Result<T, Box<dyn std::error::Error>>;
|
|
|
|
|
|
|
|
|
|
fn get_input_string() -> io::Result<String> {
|
2020-02-09 15:43:07 -05:00
|
|
|
let args: Vec<String> = env::args().collect();
|
|
|
|
|
if args.len() <= 1 {
|
|
|
|
|
println!(
|
|
|
|
|
"usage: {} file.asm",
|
|
|
|
|
args.get(0).map(String::as_str).unwrap_or("rasp")
|
|
|
|
|
);
|
|
|
|
|
process::exit(1);
|
|
|
|
|
} else {
|
|
|
|
|
fs::read_to_string(&args[1])
|
|
|
|
|
}
|
2020-01-27 19:07:57 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn main() -> Result<()> {
|
2020-02-17 16:15:06 -05:00
|
|
|
use vm::obj::syn::{lexer, parser};
|
|
|
|
|
let text = get_input_string()?;
|
|
|
|
|
let lexerdef = lexer::lexerdef();
|
|
|
|
|
let lexer = lexerdef.lexer(&text);
|
|
|
|
|
let (res, errors) = parser::parse(&lexer);
|
|
|
|
|
for err in errors {
|
|
|
|
|
println!("{}", err.pp(&lexer, &parser::token_epp));
|
2020-02-10 16:31:08 -05:00
|
|
|
}
|
2020-02-17 16:15:06 -05:00
|
|
|
println!("{:?}", res);
|
2020-02-10 18:02:44 -05:00
|
|
|
Ok(())
|
2020-02-10 16:31:08 -05:00
|
|
|
}
|