CanonSharp/CanonSharp.Parser/LexicalAnalyzer/NondeterministicFiniteAutomation.fs

39 lines
1.2 KiB
Forth
Raw Normal View History

2024-07-23 22:46:34 +08:00
module CanonSharp.Parser.LexicalAnalyzer.NondeterministicFiniteAutomation
open System
open System.Collections.Generic
open CanonSharp.Parser.LexicalAnalyzer.RegularExpression
type NondeterministicState(id: Guid, transaction: Option<char> -> list<NondeterministicState>) =
member val id = id
member val transaction = transaction
override this.GetHashCode() = this.id.GetHashCode()
new() = NondeterministicState(Guid.NewGuid(), fun a -> list.Empty)
type NondeterministicFiniteAutomation(states: HashSet<NondeterministicState>, entryTransaction: Option<char> -> list<NondeterministicState>) =
member val states = states
member val entryTransaction = entryTransaction
let convertEmptyToNonDeterministicFiniteAutomation (expression: EmptyExpression) =
let final = NondeterministicState()
let transaction (a: Option<char>) =
match a with
| Some _ -> list.Empty
| None -> [final]
let states = HashSet()
let _ = states.Add(final)
NondeterministicFiniteAutomation(states, transaction)
let convertToNondeterministicFiniteAutomation expression: RegularExpression =
match expression with
| EmptyExpression ->