EDFADefinition.cs
31 lines
| 894 B
| text/x-csharp
|
CSharpLexer
|
|
r55 | using Implab; | ||
| using System; | ||||
| namespace Implab.Parsing { | ||||
|
|
r158 | public class EDFADefinition<T> : DFADefinition where T : struct, IConvertible { | ||
|
|
r156 | readonly EnumAlphabet<T> m_alphabet; | ||
|
|
r55 | |||
| public EnumAlphabet<T> Alphabet { | ||||
| get { return m_alphabet; } | ||||
| } | ||||
|
|
r158 | public EDFADefinition(EnumAlphabet<T> alphabet) : base(alphabet.Count) { | ||
|
|
r55 | m_alphabet = alphabet; | ||
| } | ||||
|
|
r157 | public void DefineTransition(int s1, int s2, T input) { | ||
| DefineTransition(s1, s2, m_alphabet.Translate(input)); | ||||
| } | ||||
|
|
r55 | 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); | ||||
| } | ||||
| } | ||||
| } | ||||
