25 lines
No EOL
629 B
FSharp
25 lines
No EOL
629 B
FSharp
module DFA
|
|
|
|
open System
|
|
|
|
type State = { name: String }
|
|
|
|
type DFA = {
|
|
sigma: Char list
|
|
states: State list
|
|
delta: State -> Char -> State
|
|
beginState: State
|
|
acceptingStates: State list
|
|
}
|
|
|
|
let processChar (dfa: DFA) (state: State) (char: Char) =
|
|
dfa.delta state char
|
|
|
|
let rec processCharArray (dfa: DFA) (state: State) (charArr: Char list) =
|
|
match charArr with
|
|
| [] -> state
|
|
| _ -> processCharArray dfa (processChar dfa state charArr.Head) charArr.Tail
|
|
|
|
let acceptsWord (dfa: DFA) (word: String) =
|
|
dfa.acceptingStates
|
|
|> List.contains (processCharArray dfa dfa.beginState (Seq.toList word)) |