示例#1
0
        public static IDfa <TSymbol> MakeMinimizedProductDfa <TSymbol>(IDfa <TSymbol> lastDfa, IDfa <TSymbol> newDfa,
                                                                       AmbiguityHandler handler)
            where TSymbol : IEquatable <TSymbol>, IComparable <TSymbol>
        {
            // This implementation assumes that all instances of IDfa are in fact instances of AbstractDfa
            var lastDfaType      = lastDfa.GetType();
            var newDfaType       = newDfa.GetType();
            var lastDfaStateType = lastDfa.Start.GetType();
            var newDfaStateType  = newDfa.Start.GetType();

            return((IDfa <TSymbol>)MakeMinimizedProductDfaMethod
                   .MakeGenericMethod(lastDfaType, lastDfaStateType, newDfaType, newDfaStateType, typeof(TSymbol))
                   .Invoke(null, new object[] { lastDfa, newDfa, handler }));
        }
示例#2
0
        private static ProductDfa <TSymbol> MakeProductDfa <TLastDfa, TLastDfaState, TNewDfa, TNewDfaState, TSymbol>(
            TLastDfa lastDfa, TNewDfa newDfa, AmbiguityHandler handler)
            where TLastDfa : AbstractDfa <TLastDfaState, TSymbol> where TLastDfaState : AbstractDfaState <TLastDfaState, TSymbol>
            where TNewDfa : AbstractDfa <TNewDfaState, TSymbol>
            where TNewDfaState : AbstractDfaState <TNewDfaState, TSymbol>
            where TSymbol : IComparable <TSymbol>, IEquatable <TSymbol>
        {
            var result = new ProductDfaBuilder <TLastDfaState, TNewDfaState, TSymbol>(handler).Build(lastDfa.Start,
                                                                                                     newDfa.Start);

            DfaStatesConcpetCheck <TSymbol> .CheckDfaStates(result);

            return(result);
        }
示例#3
0
        public static MinimizedDfa <TSymbol> MakeMinimizedProductDfa
        <TLastDfa, TLastDfaState, TNewDfa, TNewDfaState, TSymbol>(TLastDfa lastDfa, TNewDfa newDfa,
                                                                  AmbiguityHandler handler)
            where TLastDfa : AbstractDfa <TLastDfaState, TSymbol>
            where TLastDfaState : AbstractDfaState <TLastDfaState, TSymbol>
            where TNewDfa : AbstractDfa <TNewDfaState, TSymbol>
            where TNewDfaState : AbstractDfaState <TNewDfaState, TSymbol>
            where TSymbol : IComparable <TSymbol>, IEquatable <TSymbol>
        {
            var result =
                MakeProductDfa <TLastDfa, TLastDfaState, TNewDfa, TNewDfaState, TSymbol>(lastDfa, newDfa, handler)
                .Minimized <ProductDfa <TSymbol>, ProductDfaState <TSymbol>, TSymbol>();

            DfaStatesConcpetCheck <TSymbol> .CheckDfaStates(result);

            return(result);
        }
示例#4
0
 public ProductDfaBuilder(AmbiguityHandler handler)
 {
     _getProductAccepting = handler;
     _productionMapping   = new Dictionary <Tuple <TLastDfaState, TNewDfaState>, ProductDfaState <TSymbol> >();
 }