view Implab/Parsing/EDFADefinition.cs @ 81:2c5631b43c7d v2

dispatch pool rewritten
author cin
date Fri, 26 Sep 2014 20:44:01 +0400
parents c0bf853aa04f
children 97fbbf816844
line wrap: on
line source

using Implab;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Implab.Parsing {
    public class EDFADefinition<T> : DFADefinitionBase where T : struct, IConvertible {
        EnumAlphabet<T> m_alphabet;

        public EnumAlphabet<T> Alphabet { 
            get { return m_alphabet; }
        }

        public EDFADefinition(EnumAlphabet<T> alphabet)
            : base() {
            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);
        }
    }
}