#automata #finite #deterministic #generic #state #alphabet

deterministic-finite-automaton

Simple generic implementation of a deterministic finite automaton

2 releases

0.1.1 Apr 19, 2022
0.1.0 Apr 19, 2022

#2464 in Algorithms

MIT license

5KB
110 lines

deterministic-finite-automaton

Rust implementation of a deterministic finite automaton

Wikipedia Link

usage:

// Accepts strings that contain 1 twice
let states = [0, 1, 2];
let alphabet = [0, 1];
let transition_fn = |s, c| match (s, c) {
    (0, 0) => 0,
    (0, 1) => 1,
    (1, 0) => 1,
    (1, 1) => 2,
    (2, 0) => 2,
    (2, 1) => 2,
    _ => panic!("Invalid (state, char)"),
};
let start_state = 0
let accept_states = [2];

let dfa = DFA::new(
    states,
    alphabet,
    transition_fn,
    start_state,
    accept_states,
);

assert!(dfa.input([1, 1, 0]) State::Accept(2));
assert!(dfa.input([0]) State::Reject(0));

No runtime deps