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(())
}