39 lines
1.2 KiB
Forth
39 lines
1.2 KiB
Forth
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 ->
|