vyre_libs/scan/
scan_program.rs1use vyre_foundation::ir::Program;
7
8use super::nfa;
9
10#[derive(Debug, Clone)]
12pub struct ScanProgram {
13 pub program: Program,
15 pub transition_table: Vec<u32>,
17 pub epsilon_table: Vec<u32>,
19 pub plan: nfa::NfaPlan,
21}
22
23#[must_use]
25pub fn build(patterns: &[&str], input_buf: &str, hit_buf: &str, input_len: u32) -> ScanProgram {
26 let plan = nfa::compile(patterns).for_input_len(input_len);
27 let program = nfa::nfa_scan(patterns, input_buf, hit_buf, input_len);
28 let transition_table = nfa::build_transition_table(patterns);
29 let epsilon_table = nfa::build_epsilon_table(patterns);
30 ScanProgram {
31 program,
32 transition_table,
33 epsilon_table,
34 plan,
35 }
36}