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
use std::fs::File; use std::io::{BufReader, BufWriter}; use std::path::{Path, PathBuf}; use crate::error::Error; use crate::scanner::Scanner; mod charclasses; mod codegen; mod dfa; mod error; mod nfa; mod scanner; pub fn process<T: AsRef<Path>>(path: T, output: Option<T>) -> Result<(), Error> { let f = File::open(path.as_ref())?; let mut reader = BufReader::new(f); let mut scanner = Scanner::new(&mut reader); scanner.scan()?; scanner.build(); let path = if let Some(p) = output { PathBuf::from(p.as_ref()) } else { path.as_ref().with_extension("rs") }; let file = File::create(path)?; let mut writer = BufWriter::new(file); scanner.generate(&mut writer)?; Ok(()) }