using Implab; using System; namespace Implab.Parsing { public class EDFADefinition : DFADefinition where T : struct, IConvertible { readonly EnumAlphabet m_alphabet; public EnumAlphabet Alphabet { get { return m_alphabet; } } public EDFADefinition(EnumAlphabet alphabet) : base(alphabet.Count) { m_alphabet = alphabet; } public void DefineTransition(int s1, int s2, T input) { DefineTransition(s1, s2, m_alphabet.Translate(input)); } public EDFADefinition Optimize() { return (EDFADefinition)Optimize(alphabet => new EDFADefinition((EnumAlphabet)alphabet), m_alphabet, new EnumAlphabet()); } public void PrintDFA() { PrintDFA(m_alphabet); } } }