diff --git a/example.npda b/example.npda index e228825..9579916 100644 --- a/example.npda +++ b/example.npda @@ -14,8 +14,7 @@ d(q0, epsilon, B) = { (q0, [A B]), (q0, [B B]) } // transition to q1 d(q0, epsilon, z0) = { (q1, z0) } d(q0, epsilon, A) = { (q1, A) } - -//d(q0, epsilon, B) = { (q1, B) } +d(q0, epsilon, B) = { (q1, B) } // consume stack until empty d(q1, a, A) = { (q1, epsilon) } diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..51eccca --- /dev/null +++ b/src/main.rs @@ -0,0 +1,37 @@ +use automata::automata::npda; + +fn main() { + let input = include_str!("../example.npda"); + + let table = match npda::TransitionTable::load_table(input) { + Ok((ok, logs)) => { + for log in logs.displayable() { + println!("{log}") + } + ok + } + Err(logs) => { + for log in logs.displayable() { + println!("{log}") + } + return; + } + }; + + let input = "aababdsaab"; + println!("running on: '{input}'"); + let mut simulator = npda::Simulator::begin(input, table); + loop { + match simulator.step(){ + npda::SimulatorResult::Pending => {}, + npda::SimulatorResult::Reject => { + println!("REJECTED"); + break; + }, + npda::SimulatorResult::Accept(npda) => { + println!("ACCEPT: {npda:?}"); + break; + }, + } + } +}