1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
mod scanner; mod nfa; mod dfa; mod codegen; mod charclasses; use crate::scanner::Scanner; use std::fs::File; use std::io::{BufReader, BufWriter}; use std::path::Path; pub fn process(path: String) -> Result<(), std::io::Error> { let f = File::open(path.clone())?; let mut reader = BufReader::new(f); let mut scanner = Scanner::new(&mut reader); if let Err(_) = scanner.scan() { std::process::exit(1); } scanner.build(); let path = Path::new(path.as_str()); let path = path.with_extension("rs"); let path_str = path.to_str(); if path_str.is_none() { eprintln!("Cannot get path string for output"); std::process::exit(1); } let file = File::create(path_str.unwrap())?; let mut writer = BufWriter::new(file); scanner.generate(&mut writer)?; Ok(()) }