add: NFA定义
This commit is contained in:
parent
b42b381fd6
commit
a8886bec33
|
@ -5,4 +5,9 @@
|
|||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Include="LexicalAnalyzer\RegularExpression.fs" />
|
||||
<Compile Include="LexicalAnalyzer\NondeterministicFiniteAutomation.fs" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
@ -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 ->
|
12
CanonSharp.Parser/LexicalAnalyzer/RegularExpression.fs
Normal file
12
CanonSharp.Parser/LexicalAnalyzer/RegularExpression.fs
Normal 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 ->
|
Loading…
Reference in New Issue
Block a user