当前位置: 首页>>代码示例>>C#>>正文


C# Automaton.GetMovesFrom方法代码示例

本文整理汇总了C#中Automaton.GetMovesFrom方法的典型用法代码示例。如果您正苦于以下问题:C# Automaton.GetMovesFrom方法的具体用法?C# Automaton.GetMovesFrom怎么用?C# Automaton.GetMovesFrom使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Automaton的用法示例。


在下文中一共展示了Automaton.GetMovesFrom方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: MoveFromStoTContainsC

 //check if delta(S,T,c) exists
 static bool MoveFromStoTContainsC(char c, int S, int T, Automaton<BDD> aut, CharSetSolver solver)
 {
     var ccond = solver.MkCharConstraint(c);
     foreach(var move in aut.GetMovesFrom(S))
         if (move.TargetState == T)
             if (solver.IsSatisfiable(solver.MkAnd(move.Label, ccond)))
                 return true;
     return false;
 }
开发者ID:AutomataDotNet,项目名称:Automata,代码行数:10,代码来源:EditDistance.cs

示例2: FinalStateHasVariableMoves

 private static bool FinalStateHasVariableMoves(Automaton<GrammarSymbol> MB)
 {
     foreach (Move<GrammarSymbol> move in MB.GetMovesFrom(MB.FinalState))
         if (move.Label is Nonterminal)
             return true;
     return false;
 }
开发者ID:AutomataDotNet,项目名称:Automata,代码行数:7,代码来源:ContextFreeGrammar.cs

示例3: MoveFromStoT

 //check if delta(S,T,c) exists
 static bool MoveFromStoT(int S, int T, Automaton<BDD> aut, CharSetSolver solver, out char witness)
 {
     foreach (var move in aut.GetMovesFrom(S))
         if (move.TargetState == T)
         {
             foreach(var w in solver.GenerateAllCharacters(move.Label,false)){
                 witness=w;
                 return true;
             }
         }
     witness = 'a';
     return false;
 }
开发者ID:AutomataDotNet,项目名称:Automata,代码行数:14,代码来源:EditDistance.cs

示例4: getSimplePathsDFS

        internal static void getSimplePathsDFS(int currState, Automaton<BDD> dfa, List<List<int>> paths, List<int> currPath)
        {
            foreach (var move in dfa.GetMovesFrom(currState))
            {
                if (!currPath.Contains(move.TargetState))
                {
                    var npath = new List<int>(currPath);
                    npath.Add(move.TargetState);
                    if (dfa.GetFinalStates().Contains(move.TargetState))
                        paths.Add(npath);
                    getSimplePathsDFS(move.TargetState, dfa, paths, npath);
                }
            }

        }
开发者ID:AutomataTutor,项目名称:automatatutor-backend,代码行数:15,代码来源:DFAUtilities.cs

示例5: getSimpleCyclesDFS

        internal static void getSimpleCyclesDFS(int currState, Automaton<BDD> dfa, List<List<int>> cycles, List<int> currPath)
        {
            foreach (var move in dfa.GetMovesFrom(currState))
            {
                if (!currPath.Contains(move.TargetState))
                {
                    var npath = new List<int>(currPath);
                    npath.Add(move.TargetState);
                    getSimpleCyclesDFS(move.TargetState, dfa, cycles, npath);
                }
                else
                {
                    if (currPath.ElementAt(0) == move.TargetState)
                    {
                        var npath = new List<int>(currPath);
                        npath.Add(move.TargetState);
                        cycles.Add(npath);
                    }
                }
            }

        }
开发者ID:AutomataTutor,项目名称:automatatutor-backend,代码行数:22,代码来源:DFAUtilities.cs

示例6: normalizeMoves

        /// <summary>
        /// Returns an automaton where transitions between states are collapsed to a single one
        /// </summary>
        /// <param name="automaton"></param>
        /// <param name="solver"></param>
        /// <returns></returns>
        public static Automaton<BDD> normalizeMoves(Automaton<BDD> automaton, CharSetSolver solver)
        {
            List<Move<BDD>> normMoves = new List<Move<BDD>>();
            foreach (var sourceState in automaton.States)
            {
                Dictionary<int, BDD> moveConditions = new Dictionary<int, BDD>();
                foreach (var moveFromSourceState in automaton.GetMovesFrom(sourceState))
                {
                    var target = moveFromSourceState.TargetState;
                    BDD oldCondition = null;
                    if (moveConditions.ContainsKey(target))                    
                        oldCondition = moveConditions[target];                    
                    else
                        oldCondition = solver.False;

                    if (!moveFromSourceState.IsEpsilon)
                        moveConditions[target] = solver.MkOr(oldCondition, moveFromSourceState.Label);
                    else
                        normMoves.Add(moveFromSourceState);
                }

                foreach (var targetState in moveConditions.Keys)             
                    normMoves.Add(new Move<BDD>(sourceState,targetState,moveConditions[targetState]));                
            }

            return Automaton<BDD>.Create(automaton.InitialState, automaton.GetFinalStates(), normMoves);
        }
开发者ID:AutomataTutor,项目名称:automatatutor-backend,代码行数:33,代码来源:NFAUtilities.cs

示例7: getSimplePrefixes

        // Accessory methods for strings
        #region Accessory methods for strings
        internal static List<string> getSimplePrefixes(Automaton<BDD> dfa, CharSetSolver solver)
        {
            if (!dfa.IsEpsilonFree)
                return new List<string>();

            List<string> strings = new List<string>();
            foreach (var path in getSimplePaths(dfa))
            {
                var currStrs = new List<string>();
                currStrs.Add("");
                var p = new List<int>(path);
                p.RemoveAt(0);
                int prevNode = dfa.InitialState;
                foreach (int node in p)
                {
                    foreach (var move in dfa.GetMovesFrom(prevNode))
                    {
                        if (node == move.TargetState)
                        {
                            var newStrs = new List<string>();
                            foreach (var el in solver.GenerateAllCharacters(move.Label, false))
                                foreach (var str in currStrs)
                                {
                                    newStrs.Add(str + el);
                                    strings.Add(str + el);
                                }
                            currStrs = new List<string>(newStrs);
                            break;
                        }
                    }
                    prevNode = node;
                }

            }
            return strings;
        }
开发者ID:AutomataTutor,项目名称:automatatutor-backend,代码行数:38,代码来源:DFAUtilities.cs

示例8: getPathStrings

 // gets string that forms the loop path given as a list of states
 private static void getPathStrings(Automaton<BDD> dfa, CharSetSolver solver, List<int> path, string currStr, HashSet<string> strings, int prevState)
 {
     List<int> path1 = new List<int>(path);
     var currState = path1.ElementAt(0);
     path1.RemoveAt(0);
     
     foreach (var move in dfa.GetMovesFrom(prevState))
         if (move.TargetState == currState)
         {
             if (move.Label == null)
             {
                 if (path1.Count == 0)
                     strings.Add(currStr);
                 else
                     getPathStrings(dfa, solver, path1, currStr, strings, currState);
             }
             else
                 foreach (char c in solver.GenerateAllCharacters(move.Label, false))
                     if (path1.Count == 0)
                         strings.Add(currStr + c);
                     else
                         getPathStrings(dfa, solver, path1, currStr + c, strings, currState);
         }
             
 }
开发者ID:AutomataTutor,项目名称:automatatutor-backend,代码行数:26,代码来源:DFAUtilities.cs

示例9: getCyclesLengthsFromNode

 private static void getCyclesLengthsFromNode(int length,
     Automaton<BDD> dfa, int currState, HashSet<int>[] found, int max)
 {
     if (length <= max)
         foreach (var move in dfa.GetMovesFrom(currState))
         {
             if (!found[length].Contains(move.TargetState))
             {
                 found[length].Add(move.TargetState);
                 getCyclesLengthsFromNode(length + 1, dfa, move.TargetState, found, max);
             }
         }
 }
开发者ID:AutomataTutor,项目名称:automatatutor-backend,代码行数:13,代码来源:DFAUtilities.cs

示例10: GenerateShortTerm

        internal static string GenerateShortTerm(Automaton<BDD> dfa, CharSetSolver solver)
        {
            if (dfa.IsEmpty)
                return null;

            Dictionary<int, string> shortStr = new Dictionary<int, string>();

            HashSet<int> reachedStates = new HashSet<int>();
            List<int> toExplore = new List<int>();


            reachedStates.Add(dfa.InitialState);
            toExplore.Add(dfa.InitialState);
            shortStr.Add(dfa.InitialState, "");
            var finSts = dfa.GetFinalStates();
            if (finSts.Contains(dfa.InitialState))
                return "";

            string sCurr = ""; char condC = 'a';
            while (toExplore.Count != 0)
            {
                var current = toExplore.First();
                toExplore.RemoveAt(0);
                shortStr.TryGetValue(current, out sCurr);

                var reachableFromCurr = dfa.GetMovesFrom(current);
                foreach (var move in reachableFromCurr)
                {
                    if (!reachedStates.Contains(move.TargetState))
                    {
                        reachedStates.Add(move.TargetState);
                        toExplore.Add(move.TargetState);

                        if (move.Label == null)
                        {
                            shortStr.Add(move.TargetState, sCurr);
                        }
                        else
                        {
                            foreach (var v in solver.GenerateAllCharacters(move.Label, false))
                            {
                                condC = v;
                                break;
                            }
                            shortStr.Add(move.TargetState, sCurr + condC);
                        }
                        if (finSts.Contains(move.TargetState))
                        {
                            return sCurr + condC;
                        }

                    }
                }
            }
            return null;
        }
开发者ID:AutomataTutor,项目名称:automatatutor-backend,代码行数:56,代码来源:DFAUtilities.cs

示例11: ComputeModels

        internal static void ComputeModels(
            string currStr, int currState,
            Automaton<BDD> dfa, List<int> finalStates, HashSet<char> alphabet, CharSetSolver solver,
            List<string> positive, List<string> negative)
        {
            if (currStr.Length >= 8)
                return;

            if (currState == -1 || !finalStates.Contains(currState))
                negative.Add(currStr);
            else
                positive.Add(currStr);

            foreach (char ch in alphabet)
            {
                if (currState == -1)
                    ComputeModels(currStr + ch, currState, dfa, finalStates, alphabet, solver, positive, negative);
                else
                {
                    bool found = false;
                    foreach (var move in dfa.GetMovesFrom(currState))
                    {
                        if (solver.IsSatisfiable(solver.MkAnd(move.Label, solver.MkCharConstraint(false, ch))))
                        {
                            found = true;
                            ComputeModels(currStr + ch, move.TargetState, dfa, finalStates, alphabet, solver, positive, negative);
                            break;
                        }
                    }
                    if (!found)
                        ComputeModels(currStr + ch, -1, dfa, finalStates, alphabet, solver, positive, negative);
                }
            }
        }
开发者ID:AutomataTutor,项目名称:automatatutor-backend,代码行数:34,代码来源:DFAUtilities.cs

示例12: dfsRecStartingTimes

 private static void dfsRecStartingTimes(Automaton<BDD> dfa, int currState, HashSet<int> discovered, List<int> order)
 {
     order.Add(currState);
     List<Move<BDD>> moves = new List<Move<BDD>>(dfa.GetMovesFrom(currState));
     moves.Sort(delegate(Move<BDD> c1, Move<BDD> c2) {
         if(c1.Label==null)
             return 1;
         if (c2.Label == null)
             return -1;
         return c1.Label.ToString().CompareTo(c2.Label.ToString());
     });
     foreach (var move in moves)
         if (!discovered.Contains(move.TargetState))
         {
             discovered.Add(move.TargetState);
             dfsRecStartingTimes(dfa, move.TargetState, discovered, order);
         }
 }
开发者ID:AutomataTutor,项目名称:automatatutor-backend,代码行数:18,代码来源:DFAUtilities.cs

示例13: GetNFAEditScriptTimeout

        // looks for an edit at depth "depth" 
        // returns false and null in bestScript if no edit is found at depth "depth"
        // returns false and not null in bestScript if found
        // returns true if timeout
        internal bool GetNFAEditScriptTimeout(
            int depth, long lastEditHash, 
            Automaton<BDD> currentNfa2,
            List<NFAEdit> editList, int scriptCost,
            NFAEditScript bestScript)
        {
            // if timeout return true
            if (sw.ElapsedMilliseconds > timeout)
                return true;


            //Stop if no more moves left
            if (depth == 0)
            {
                if (DFAUtilities.ApproximateMNEquivalent(tests, nfa1density, currentNfa2, al, solver) && currentNfa2.IsEquivalentWith(nfa1, solver))
                    //check if totalCost < finalScript cost and replace if needed
                    if (bestScript.script == null || scriptCost < bestScript.GetCost())
                        bestScript.script = ObjectCopier.Clone<List<NFAEdit>>(editList);
                return false;
            }

            NFAEdit edit = null;

            long thisEditHash = 0;

            #region Flip one state from fin to non fin
            foreach (var state in currentNfa2.States)
            {
                thisEditHash = state;
                if (CanAdd(thisEditHash, lastEditHash))
                {
                    //flip its final non final status

                    var newFinalStates = new HashSet<int>(currentNfa2.GetFinalStates());
                    Automaton<BDD> nfa2new = null;
                    if (currentNfa2.GetFinalStates().Contains(state))
                    {
                        edit = new NFAEditState(state, false);
                        editList.Insert(0, edit);
                        newFinalStates.Remove(state);
                        nfa2new = Automaton<BDD>.Create(currentNfa2.InitialState, newFinalStates, currentNfa2.GetMoves());
                    }
                    else
                    {
                        edit = new NFAEditState(state, true);
                        editList.Insert(0, edit);
                        newFinalStates.Add(state);
                        nfa2new = Automaton<BDD>.Create(currentNfa2.InitialState, newFinalStates, currentNfa2.GetMoves());
                    }

                    if (GetNFAEditScriptTimeout(depth - 1, thisEditHash, nfa2new, editList, scriptCost + edit.GetCost(), bestScript))
                        return true;

                    editList.RemoveAt(0);
                }
            }
            #endregion

            #region Change transition from source state
            currentNfa2 = NFAUtilities.normalizeMoves(currentNfa2, solver);
            foreach (var sourceState in currentNfa2.States)
            {
                HashSet<int> unreachedStates = new HashSet<int>(currentNfa2.States);
                foreach (var moveFromSource in currentNfa2.GetMovesFrom(sourceState))
                {
                    // take all chars in alphabet
                    foreach (var c in al)
                    {
                        long moveHash =  currentNfa2.StateCount + IntegerUtil.TripleToInt(sourceState, moveFromSource.TargetState, alphabetMap[c]);
                        thisEditHash = currentNfa2.StateCount + moveHash;
                        if (CanAdd(thisEditHash, lastEditHash))
                        {
                            BDD cCond = solver.False;
                            BDD newCond = solver.False;

                            //skip epsilon moves
                            if (moveFromSource.Label != null)
                            {
                                // if c in move, remove it and recursion
                                if (solver.Contains(moveFromSource.Label, c))
                                {
                                    cCond = solver.MkNot(solver.MkCharConstraint(false, c));
                                    newCond = solver.MkAnd(moveFromSource.Label, cCond);
                                }
                                else // if c not in move, add it and recursion
                                {
                                    cCond = solver.MkCharConstraint(false, c);
                                    newCond = solver.MkOr(moveFromSource.Label, cCond);
                                }

                                var newMoves = new List<Move<BDD>>(currentNfa2.GetMoves());
                                newMoves.Remove(moveFromSource);
                                newMoves.Add(new Move<BDD>(sourceState, moveFromSource.TargetState, newCond));
                                var nfa2new = Automaton<BDD>.Create(currentNfa2.InitialState, currentNfa2.GetFinalStates(), newMoves);

                                edit = new NFAEditMove(sourceState, moveFromSource.TargetState, c);
//.........这里部分代码省略.........
开发者ID:AutomataTutor,项目名称:automatatutor-backend,代码行数:101,代码来源:NFAEditDistance.cs

示例14: canRemoveEdge

        public static bool canRemoveEdge(Automaton<BDD> nfa, int sourceState, int targetState, CharSetSolver solver, Pair<IEnumerable<string>, IEnumerable<string>> tests, HashSet<char> al)
        {
            List<Move<BDD>> newMoves = new List<Move<BDD>>();
            newMoves = nfa.GetMoves().ToList();
            bool moveExists = false;

            //goes through each move from state1 and remove it if it goes to state2 resp.
            foreach (var move in nfa.GetMovesFrom(sourceState))
                if (move.TargetState == targetState)
                {
                    newMoves.Remove(move);
                    moveExists = true;
                }

            var newNfa = Automaton<BDD>.Create(nfa.InitialState, nfa.GetFinalStates(), newMoves);

            if(moveExists)
                if (DFAUtilities.ApproximateMNEquivalent(tests, 0.5, newNfa, al, solver))
                    return nfa.IsEquivalentWith(newNfa, solver);
            return false;
        }
开发者ID:AutomataTutor,项目名称:automatatutor-backend,代码行数:21,代码来源:NFAUtilities.cs

示例15: dfsRecFinishingTimes

 private static void dfsRecFinishingTimes(Automaton<BDD> dfa, int currState, HashSet<int> discovered, List<int> order)
 {
     foreach (var move in dfa.GetMovesFrom(currState))
     {
         if (!discovered.Contains(move.TargetState))
         {
             discovered.Add(move.TargetState);
             dfsRecFinishingTimes(dfa, move.TargetState, discovered, order);
         }
     }
     order.Insert(0, currState);
 }
开发者ID:AutomataTutor,项目名称:automatatutor-backend,代码行数:12,代码来源:DFAUtilities.cs


注:本文中的Automaton.GetMovesFrom方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。