mirror of
https://github.com/ParkerTenBroeck/automata.git
synced 2026-06-07 05:28:45 -04:00
Merge remote-tracking branch 'refs/remotes/origin/main'
This commit is contained in:
commit
48f0c6eed8
2 changed files with 38 additions and 2 deletions
|
|
@ -14,8 +14,7 @@ d(q0, epsilon, B) = { (q0, [A B]), (q0, [B B]) }
|
||||||
// transition to q1
|
// transition to q1
|
||||||
d(q0, epsilon, z0) = { (q1, z0) }
|
d(q0, epsilon, z0) = { (q1, z0) }
|
||||||
d(q0, epsilon, A) = { (q1, A) }
|
d(q0, epsilon, A) = { (q1, A) }
|
||||||
|
d(q0, epsilon, B) = { (q1, B) }
|
||||||
//d(q0, epsilon, B) = { (q1, B) }
|
|
||||||
|
|
||||||
// consume stack until empty
|
// consume stack until empty
|
||||||
d(q1, a, A) = { (q1, epsilon) }
|
d(q1, a, A) = { (q1, epsilon) }
|
||||||
|
|
|
||||||
37
src/main.rs
Normal file
37
src/main.rs
Normal file
|
|
@ -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;
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue