add: NFA定义

This commit is contained in:
jackfiled 2024-07-23 22:46:34 +08:00
parent b42b381fd6
commit a8886bec33
3 changed files with 55 additions and 0 deletions

View File

@ -5,4 +5,9 @@
<GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>
<ItemGroup>
<Compile Include="LexicalAnalyzer\RegularExpression.fs" />
<Compile Include="LexicalAnalyzer\NondeterministicFiniteAutomation.fs" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,38 @@
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 ->

View File

@ -0,0 +1,12 @@
module CanonSharp.Parser.LexicalAnalyzer.RegularExpression
type RegularExpression =
| EmptyExpression
| SymbolExpression of symbol: char
| AlternationExpression of left: RegularExpression * right : RegularExpression
| ConcatenationExpression of first: RegularExpression * second : RegularExpression
| KleeneExpression of expression: RegularExpression
let convertToNondeterministicFiniteAutomation expression =
match expression with
| EmptyExpression emptyExpression ->