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 })); }
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); }
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); }
public ProductDfaBuilder(AmbiguityHandler handler) { _getProductAccepting = handler; _productionMapping = new Dictionary <Tuple <TLastDfaState, TNewDfaState>, ProductDfaState <TSymbol> >(); }