EDFADefinition.cs
32 lines
| 889 B
| text/x-csharp
|
CSharpLexer
cin
|
r55 | using Implab; | ||
using System; | ||||
namespace Implab.Parsing { | ||||
public class EDFADefinition<T> : DFADefinitionBase where T : struct, IConvertible { | ||||
cin
|
r156 | readonly EnumAlphabet<T> m_alphabet; | ||
cin
|
r55 | |||
public EnumAlphabet<T> Alphabet { | ||||
get { return m_alphabet; } | ||||
} | ||||
cin
|
r156 | public EDFADefinition(EnumAlphabet<T> alphabet) { | ||
cin
|
r55 | Safe.ArgumentNotNull(alphabet, "alphabet"); | ||
m_alphabet = alphabet; | ||||
} | ||||
public override int AlphabetSize { | ||||
get { return m_alphabet.Count; } | ||||
} | ||||
public EDFADefinition<T> Optimize() { | ||||
var optimized = new EDFADefinition<T>(new EnumAlphabet<T>()); | ||||
Optimize(optimized, m_alphabet, optimized.Alphabet); | ||||
return optimized; | ||||
} | ||||
public void PrintDFA() { | ||||
PrintDFA(m_alphabet); | ||||
} | ||||
} | ||||
} | ||||