Esempio n. 1
0
        private static XElement TryToGradeWordProblem(XElement xmlPda, XElement xmlWordsInLanguage, XElement xmlWordsNotInLanguage, XElement xmlMaxGrade, CancellationToken token)
        {
            var pda = PDA <char, char> .FromXml(xmlPda);

            pda.CreateRunner(token);
            var alphabet   = PDAXmlParser.ParseAlphabetFromXmlPDA(xmlPda);
            var maxGrade   = int.Parse(xmlMaxGrade.Value);
            var wordsIn    = xmlWordsInLanguage.Elements().Select(xmlWord => string.Concat(xmlWord.Value)).ToList();    //.Take(maximumWordLength)
            var wordsNotIn = xmlWordsNotInLanguage.Elements().Select(xmlWord => string.Concat(xmlWord.Value)).ToList(); //.Take(maximumWordLength)

            var feedback = new List <string>();
            int numberOfCorrectWords;

            try
            {
                numberOfCorrectWords = CheckWordsInLanguage(wordsIn, alphabet, pda, feedback) + CheckWordsNotInLanguage(wordsNotIn, alphabet, pda, feedback);
            }
            catch (InconsistentPDAException)
            {
                return(Grader.CreateXmlFeedback(maxGrade, new List <string>()
                {
                    "Oops! Seems like your tutor created an inconsistent pda...therefore, you get the full grade ;)"
                }));
            }

            int totalNumberOfWords = wordsIn.Count() + wordsNotIn.Count();
            int grade = (int)((double)numberOfCorrectWords * maxGrade / totalNumberOfWords);

            if (grade == maxGrade)
            {
                feedback.Add("Correct!");
            }

            return(Grader.CreateXmlFeedback(grade, feedback));
        }
Esempio n. 2
0
        public void SimulationRunnerComparisonTest()
        {
            var pda = new PDA <char, char>(new AcceptanceCondition.EmptyStack(), false, 'Z', false, "Z");

            pda.AddState(1, false);
            pda.AddTransition().From(0).To(0).Read().Pop('Z').Push("ZZZZZZZZZZZZZZZZZZ");
            pda.AddTransition().From(0).To(1).Read().Pop('Z').Push();
            pda.AddTransition().From(1).To(1).Read('a').Pop('Z').Push();

            var word = "aaaaaaaaaaaaaaaaa".ToCharArray();

            var s = new Stopwatch();

            s.Start();
            var path1 = CFGSimulationRunner <char> .RunSimulation(pda, word);

            s.Stop();

            Console.WriteLine(s.ElapsedMilliseconds);

            s.Restart();
            pda.CreateRunner();
            var path2 = DirectSimulationRunner <char, char> .RunSimulation(pda, word);

            s.Stop();

            Console.WriteLine(s.ElapsedMilliseconds);
        }
Esempio n. 3
0
 private static void AddStatesToPDA(PDA <A, S> origin, PDA <A, StackSymbolSequence <S> > target)
 {
     foreach (var state in origin.States.Where(s => s.Key != origin.InitialState.Id))
     {
         target.AddState(state.Key, state.Value.Final);
     }
 }
        private static XElement TryToRunSimulation(XElement xmlPda, XElement xmlWord, CancellationToken token)
        {
            var pda = PDA <char, char> .FromXml(xmlPda);

            var word = xmlWord.Value;

            try
            {
                SimulationPath <char, char> path;

                if (pda.Deterministic)
                {
                    path = DPDASimulationRunner <char, char> .RunSimulation(pda, word.ToArray(), pda.AcceptanceCondition, token);
                }
                else
                {
                    path = CFGSimulationRunner <char> .RunSimulation(pda, word.ToArray(), token);
                }
                XNamespace xNamespace = @ns;
                return(new XElement(xNamespace + "div", path.ToXml()));
            }
            catch (InconsistentPDAException ex)
            {
                return(Error(ex.Message));
            }
            catch (NoAcceptanceException ex)
            {
                return(Error(ex.Message));
            }
        }
Esempio n. 5
0
        private static void UpdateLocalPlayerPda(INitroxPlayer player, PingInstance ping)
        {
            PDA          localPlayerPda      = Player.main.GetPDA();
            GameObject   pdaScreenGameObject = localPlayerPda.ui.gameObject;
            GameObject   pingTabGameObject   = pdaScreenGameObject.transform.Find("Content/PingManagerTab").gameObject;
            uGUI_PingTab pingTab             = pingTabGameObject.GetComponent <uGUI_PingTab>();

            MethodInfo updateEntities = typeof(uGUI_PingTab).GetMethod("UpdateEntries", BindingFlags.NonPublic | BindingFlags.Instance);

            updateEntities.Invoke(pingTab, new object[] { });

            FieldInfo pingTabEntriesField = typeof(uGUI_PingTab).GetField("entries", BindingFlags.NonPublic | BindingFlags.Instance);
            Dictionary <int, uGUI_PingEntry> pingEntries = (Dictionary <int, uGUI_PingEntry>)pingTabEntriesField.GetValue(pingTab);
            uGUI_PingEntry pingEntry = pingEntries[ping.GetInstanceID()];

            pingEntry.icon.color = player.PlayerSettings.PlayerColor;

            GameObject pingEntryGameObject = pingEntry.gameObject;

            pingEntryGameObject.transform.Find("ColorToggle").gameObject.SetActive(false);

            if (!localPlayerPda.isInUse)
            {
                pdaScreenGameObject.gameObject.SetActive(false);
            }
        }
Esempio n. 6
0
        static void Main(string[] args)
        {
            var inputAlphabet = new List <char> {
                '(', ')'
            };
            var stackAlphabet = new List <char> {
                '('
            };
            var states = new HashSet <int> {
                0
            };
            var transitions = new List <PDATransition>
            {
                new PDATransition('(', '_', 0, 0, "("),
                new PDATransition('(', '(', 0, 0, "(("),
                new PDATransition(')', '(', 0, 0, "")
            };

            var pda = new PDA(inputAlphabet, stackAlphabet, states, 0, transitions);

            Console.WriteLine(pda.DoesMatch(""));             // True
            Console.WriteLine(pda.DoesMatch("(())"));         // True
            Console.WriteLine(pda.DoesMatch("(()"));          // False
            Console.WriteLine(pda.DoesMatch("((())()(()))")); // True
        }
Esempio n. 7
0
        public void RunSimulationCFGTest3()
        {
            var pda = new PDA <char, char>(new AcceptanceCondition.FinalState(), false, 'Z', false, "ZXY", 'V');

            pda.AddState(1, false);
            pda.AddState(2, true);
            pda.AddTransition().From(0).To(0).Read('a').Pop('Z').Push("XZ");
            pda.AddTransition().From(0).To(0).Read('a').Pop('X').Push("XX");
            pda.AddTransition().From(0).To(0).Read('a').Pop('Y').Push("XY");
            pda.AddTransition().From(0).To(0).Read('b').Pop('Z').Push("YZ");
            pda.AddTransition().From(0).To(0).Read('b').Pop('Y').Push("YY");
            pda.AddTransition().From(0).To(0).Read('b').Pop('X').Push("YX");
            pda.AddTransition().From(0).To(1).Read().Pop('X').Push("X");
            pda.AddTransition().From(0).To(1).Read().Pop('Y').Push("Y");
            pda.AddTransition().From(0).To(1).Read().Pop('Z').Push("Z");
            pda.AddTransition().From(1).To(1).Read('a').Pop('X').Push();
            pda.AddTransition().From(1).To(1).Read('b').Pop('Y').Push();
            pda.AddTransition().From(1).To(2).Read().Pop('Z').Push("ZZ");

            pda.CreateRunner();

            var path = CFGSimulationRunner <char> .RunSimulation(pda, "abaabbaaba".ToCharArray());

            var act = path.ToXml();

            var         reader    = new StreamReader(@"..\..\..\TestPDL\PDATest\XmlPathCFG3.xml");
            XmlDocument expXmlDoc = new XmlDocument();

            expXmlDoc.Load(reader);
            XDocument xDoc = XDocument.Load(new XmlNodeReader(expXmlDoc));
            var       exp  = xDoc.Root;

            Assert.IsTrue(XNode.DeepEquals(exp, act));
        }
Esempio n. 8
0
        private void OpenPDA()
        {
            bool isStorageTypeExists = TechTypeHandler.TryGetModdedTechType(storageModuleString, out TechType techType);

            if (!isStorageTypeExists)
            {
                return;
            }

            ItemsContainer storageInSlot = helper.GetSeamothStorageInSlot(slotID, techType);

            if (storageInSlot != null)
            {
                PDA pda = Player.main.GetPDA();

                Inventory.main.SetUsedStorage(storageInSlot, false);

                if (!pda.Open(PDATab.Inventory, tr, new PDA.OnClose(OnClosePDA)))
                {
                    OnClosePDA(pda);
                }
            }
            else
            {
                OnClosePDA(null);
            }
        }
 private void OnFridgeClose(PDA pda)
 {
     foreach (InventoryItem item in _dumpContainer)
     {
         GameObject.Destroy(item.item.gameObject);
     }
 }
        public void TestRealDPDAToNormalForm()
        {
            var dpda = new PDA <char, char>(new AcceptanceCondition.EmptyStack(), true, 'Z', false, "ZYX", 'A');

            dpda.AddState(1, false);

            dpda.AddTransition().From(0).To(0).Read('a').Pop('Z').Push("XZ");
            dpda.AddTransition().From(0).To(0).Read('a').Pop('X').Push("XX");
            dpda.AddTransition().From(0).To(0).Read('a').Pop('Y').Push("XY");
            dpda.AddTransition().From(0).To(0).Read('b').Pop('Z').Push("YZ");
            dpda.AddTransition().From(0).To(0).Read('b').Pop('X').Push("YX");
            dpda.AddTransition().From(0).To(0).Read('b').Pop('Y').Push("YY");

            dpda.AddTransition().From(0).To(1).Read('x').Pop('Z').Push("Z");
            dpda.AddTransition().From(0).To(1).Read('x').Pop('X').Push("X");
            dpda.AddTransition().From(0).To(1).Read('x').Pop('Y').Push("Y");

            dpda.AddTransition().From(1).To(1).Read('a').Pop('X').Push();
            dpda.AddTransition().From(1).To(1).Read('b').Pop('Y').Push();
            dpda.AddTransition().From(1).To(1).Read().Pop('Z').Push();

            var dpdaInNormalForm = DPDAToNormalFormConverter <char, char> .ToNormalForm(dpda);

            dpda.CreateRunner();
            dpdaInNormalForm.CreateRunner();

            var equalityResult = new PDAEqualityResult <char, StackSymbolSequence <char> >(dpda, dpdaInNormalForm, "abx", 10, 600000, 3000);

            Assert.IsTrue(equalityResult.AreEqual);
        }
Esempio n. 11
0
        public static SimulationPath <A, S> RunSimulation(PDA <A, S> pda, A[] word)
        {
            var acceptanceResult = pda.AcceptsWord(word);

            if (!acceptanceResult.Accepts())
            {
                throw new NoAcceptanceException("the pda does not accept the word, therefore, a simulation is not possible");
            }

            var initialNode = SimulationNode <A, S> .InitialNode(
                new Configuration <A, S>(pda.InitialState, new Word <A>(word), CurrentStack <S> .WithSingleSymbol(pda.FirstStackSymbol)),
                pda.AcceptanceCondition);

            var frontChain = new List <SimulationNode <A, S> > {
                initialNode
            };

            while (frontChain.Count() > 0)
            {
                var nodesAcceptedWord = frontChain.Where(node => node.HasAcceptedWord).ToList();
                if (nodesAcceptedWord.Count() > 0)
                {
                    return(SimulationPathFromFinalNode(nodesAcceptedWord.First()));
                }

                foreach (var node in frontChain)
                {
                    node.DoStep();
                }

                frontChain = frontChain.SelectMany(node => node.Children).ToList();
            }
            throw new InvalidOperationException("the given pda does not accept the word, therefore a simulation is not possible");
        }
Esempio n. 12
0
        public static bool Prefix(ref uGUI_DepthCompass __instance, ref bool __result)
        {
            if (__instance == null)
            {
                __result = false;
                return(false);
            }
            if (!__instance._initialized)
            {
                __result = false;
                return(false);
            }
            if (!uGUI.isMainLevel)
            {
                __result = false;
                return(false);
            }
            if (LaunchRocket.isLaunching)
            {
                __result = false;
                return(false);
            }
            if (uGUI.isIntro)
            {
                __result = false;
                return(false);
            }
            Player main = Player.main;

            if (main == null)
            {
                __result = false;
                return(false);
            }
            PDA pda = main.GetPDA();

            if (pda != null && pda.isInUse)
            {
                __result = false;
                return(false);
            }
            Player.Mode mode = main.GetMode();
            if (mode == Player.Mode.Piloting)
            {
                __result = false;
                return(false);
            }
            Inventory main2 = Inventory.main;

            if (main2 != null && main2.equipment != null && TechTypeCheck(main2))
            {
                __result = true;
                return(false);
            }
            uGUI_CameraDrone main3 = uGUI_CameraDrone.main;

            __result = main3 != null && main3.GetCamera() != null;
            return(false);
        }
Esempio n. 13
0
        public void OpenStorage()
        {
            Player main = Player.main;
            PDA    pda  = main.GetPDA();

            Inventory.main.SetUsedStorage(_dumpContainer, false);
            pda.Open(PDATab.Inventory, null, OnDumpClose, 4f);
        }
        public static void PDA_getui_Postfix(PDA __instance)
        {
            uGUI_CanvasScaler component = Traverse.Create(__instance).Field("screen").GetValue <GameObject>().GetComponent <uGUI_CanvasScaler>();

            __instance.transform.localScale = new Vector3(MainPatcher.pdaScale, MainPatcher.pdaScale, 1f);
            component.transform.localScale  = Vector3.one * MainPatcher.screenScale;
            component.SetAnchor(__instance.screenAnchor);
        }
        public void MergeDPDAsWithEmptyStackTest()
        {
            var dpda1 = new PDA <char, char>(new AcceptanceCondition.EmptyStack(), true, 'A', false, "ABC", 'Z');

            dpda1.AddState(1, false);
            dpda1.AddState(2, false);
            dpda1.AddState(3, false);
            dpda1.AddState(4, false);
            dpda1.AddState(5, false);
            dpda1.AddState(6, false);
            dpda1.AddState(7, false);

            dpda1.AddTransition().From(0).To(1).Read().Pop('A').Push("AAA");
            dpda1.AddTransition().From(1).To(2).Read('a').Pop('A').Push();
            dpda1.AddTransition().From(2).To(3).Read('a').Pop('A').Push();
            dpda1.AddTransition().From(3).To(4).Read().Pop('A').Push("BBCC");
            dpda1.AddTransition().From(4).To(4).Read('b').Pop('B').Push();
            dpda1.AddTransition().From(4).To(4).Read('c').Pop('C').Push();

            dpda1.AddTransition().From(1).To(5).Read().Pop('B').Push();
            dpda1.AddTransition().From(2).To(6).Read().Pop('B').Push("B");
            dpda1.AddTransition().From(6).To(7).Read().Pop('B').Push("B");
            dpda1.AddTransition().From(7).To(6).Read().Pop('B').Push("B");


            var dpda2 = new PDA <char, char>(new AcceptanceCondition.EmptyStack(), true, 'A', false, "ABC", 'Z');

            dpda2.AddState(1, false);
            dpda2.AddState(2, false);
            dpda2.AddState(3, false);
            dpda2.AddState(4, false);

            dpda2.AddTransition().From(0).To(1).Read().Pop('A').Push("AAA");
            dpda2.AddTransition().From(1).To(2).Read('a').Pop('A').Push();
            dpda2.AddTransition().From(2).To(3).Read('a').Pop('A').Push();
            dpda2.AddTransition().From(3).To(4).Read().Pop('A').Push("BBCC");
            dpda2.AddTransition().From(4).To(4).Read('b').Pop('B').Push();
            dpda2.AddTransition().From(4).To(4).Read('c').Pop('C').Push();

            var mergedDPDAForSimulationOf1 = PDATransformer <char, char> .MergeDPDAsWithEmptyStack(dpda1, dpda2, 'X', 'Y');

            dpda1.CreateRunner();
            mergedDPDAForSimulationOf1.CreateRunner();

            var equalityResult1 = new PDAEqualityResult <char, char>(dpda1, mergedDPDAForSimulationOf1, "abc", 10, 400000, 3000);

            Assert.IsTrue(equalityResult1.AreEqual);


            var mergedDPDAForSimulationOf2 = PDATransformer <char, char> .MergeDPDAsWithEmptyStack(dpda2, dpda1, 'X', 'Y');

            dpda2.CreateRunner();
            mergedDPDAForSimulationOf2.CreateRunner();

            var equalityResult2 = new PDAEqualityResult <char, char>(dpda2, mergedDPDAForSimulationOf2, "abc", 10, 400000, 3000);

            Assert.IsTrue(equalityResult2.AreEqual);
        }
Esempio n. 16
0
        // Completely replaces the original OnUse method in the BaseBioReactor
        internal void OnPdaOpen(BaseBioReactorGeometry model)
        {
            pdaIsOpen = true;

            PDA pda = Player.main.GetPDA();

            Inventory.main.SetUsedStorage(this.BioReactor.container, false);
            pda.Open(PDATab.Inventory, model.storagePivot, new PDA.OnClose(OnPdaClose), 4f);
        }
Esempio n. 17
0
        public ActionResult TOEdit(PDA p)
        {
            PDA pp = PDA.GetEntityByID(p.ID);

            pp.SupplierId = p.SupplierId;
            int rtn = pp.UpdateByID();

            return(Content(rtn > 0 ? "ok" : "修改出错了!!"));
        }
Esempio n. 18
0
        public static PDA <A, S> ToDPDAWithNormalEpsilonTransitions(PDA <A, S> dpda)
        {
            Assertion.Assert(dpda.Deterministic, "the epsilon transitions can only be normalized for a deterministic PDA, but the given is not");

            var res = dpda.Clone();

            CorrectEpsilonTransitions(res);
            return(res);
        }
        private void Awake()
        {
            objectHelper = Main.objectHelper;

            Instance    = gameObject.GetComponent <LaserCannonControl>();
            thisSeamoth = Instance.GetComponent <SeaMoth>();
            energyMixin = thisSeamoth.GetComponent <EnergyMixin>();
            playerMain  = Player.main;
            PdaMain     = playerMain.GetPDA();

            isPlayerInThisVehicle = playerMain.GetVehicle() == thisSeamoth ? true : false;

            GameObject repulsionCannonPrefab = Instantiate(Resources.Load <GameObject>("WorldEntities/Tools/RepulsionCannon"));

            shootSound = objectHelper.GetObjectClone(repulsionCannonPrefab.GetComponent <RepulsionCannon>().shootSound);

            DestroyImmediate(repulsionCannonPrefab);

            loopingEmitter       = gameObject.AddComponent <FMOD_CustomLoopingEmitter>();
            loopingEmitter.asset = shootSound;

            GameObject powerTransmitterPrefab = Instantiate(Resources.Load <GameObject>("Submarine/Build/PowerTransmitter"));

            GameObject laserBeam = objectHelper.GetGameObjectClone(powerTransmitterPrefab.GetComponent <PowerFX>().vfxPrefab, null, false);

            LineRenderer lineRenderer = laserBeam.GetComponent <LineRenderer>();

            lineRenderer.startWidth     = 0.2f;
            lineRenderer.endWidth       = 0.2f;
            lineRenderer.positionCount  = 2;
            lineRenderer.receiveShadows = false;
            lineRenderer.loop           = false;

            laserRight      = objectHelper.GetGameObjectClone(laserBeam, thisSeamoth.torpedoTubeRight, false);
            laserRight.name = "laserRight";
            laserRight.transform.localPosition = Vector3.zero;
            laserRight.transform.localRotation = Quaternion.identity;
            rightBeam = laserRight.GetComponent <LineRenderer>();

            laserLeft      = objectHelper.GetGameObjectClone(laserBeam, thisSeamoth.torpedoTubeLeft, false);
            laserLeft.name = "laserLeft";
            laserLeft.transform.localPosition = Vector3.zero;
            laserLeft.transform.localRotation = Quaternion.identity;
            leftBeam = laserLeft.GetComponent <LineRenderer>();

            DestroyImmediate(laserBeam);
            DestroyImmediate(powerTransmitterPrefab);

            OnConfigChanged(true);

            thisSeamoth.onToggle             += OnToggle;
            thisSeamoth.modules.onAddItem    += OnAddItem;
            thisSeamoth.modules.onRemoveItem += OnRemoveItem;
            playerMain.playerModeChanged.AddHandler(this, new Event <Player.Mode> .HandleFunction(OnPlayerModeChanged));

            Main.OnConfigChanged.AddHandler(this, new Event <bool> .HandleFunction(OnConfigChanged));
        }
        public static void openPDA()
        {
            PDA pda = Player.main.GetPDA();

            if (!pda.Open())
            {
                return;
            }
        }
        private static void AddTransitions(SDA <A, TripleStackSymbol <S> > sda, PDA <A, S> dpda, Dictionary <string, TripleStackSymbol <S> > stackSymbols)
        {
            var transitions = dpda.States.SelectMany(s => s.Value.Transitions).ToList();

            foreach (var t in transitions.Where(t => !t.SymbolIn.IsEmpty()))
            {
                AddTransition(t, sda, dpda, stackSymbols);
            }
        }
        public static Node <A, S> NodeInEmptyStackPathBackToFinalStatePath(PDA <A, S> pdaWithFinalState, Node <A, S> node, bool firstNode)
        {
            var oldStackLength = node.Config.Stack.StackSymbols.Count();
            var config         = new Configuration <A, S>(
                pdaWithFinalState.States[node.Config.State.Id - 1],
                node.Config.RemainingWord,
                new CurrentStack <S>(node.Config.Stack.StackSymbols.Take(oldStackLength - 1)));

            return(new Node <A, S>(config, firstNode ? null : node.TransitionToHere));
        }
Esempio n. 23
0
 private static bool CheckIfStackIsEmpty <U, V>(PDA <U, V> pda, Transition <U, V> epsilonTransition, VirtualConfiguration <U, V> currentConfig) where U : IEquatable <U> where V : IEquatable <V>
 {
     if (currentConfig.stack.Count() == 0)
     {
         pda.RemoveTransition(epsilonTransition);
         pda.AddTransition().From(epsilonTransition.Origin.Id).To(currentConfig.state.Id).Read().Pop(epsilonTransition.StackSymbolIn).Push();
         return(true);
     }
     return(false);
 }
Esempio n. 24
0
        public void OnHandClick(HandTargetEventData data)
        {
            PDA pda = Player.main.GetPDA();

            if (!pda.isInUse)
            {
                Inventory.main.SetUsedStorage(equipment, false);
                pda.Open(PDATab.Inventory, transform, null);
            }
        }
Esempio n. 25
0
        private static SimulationPath <A, char> RunSimulationWithCFGForFinalState(PDA <A, char> pda, A[] word, CancellationToken token)
        {
            Assertion.Assert(pda.AcceptanceCondition.IsFinalState(), "the pda has not final state as acceptance condition");

            var pdaWithEmptyStack = PDATransformer <A, char> .ToPDAWithEmptyStack(pda);

            var path = RunSimulationWithCFGForEmptyStack(pdaWithEmptyStack, word, token);

            return(ConvertEmptyStackSimulationPathBackToFinalState(path, pda));
        }
Esempio n. 26
0
        public void TestDPDARunnerForEmptyLanguage()
        {
            var dpda = new PDA <char, char>(new AcceptanceCondition.EmptyStack(), true, 'Z', false, "Z");

            dpda.AddTransition().From(0).To(0).Read().Pop('Z').Push("Z");

            dpda.CreateRunner();

            Assert.IsFalse(dpda.AcceptsWord("").Accepts());
        }
Esempio n. 27
0
 public static bool IsWordAccepted(PDA <A, S> pda, A[] word)
 {
     if (pda.AcceptanceCondition.IsEmptyStack() && pda.AcceptanceCondition.IsFinalState())
     {
         var acceptedByFinalState = IsWordAccepted(pda, word, new AcceptanceCondition.FinalState());
         var acceptedByEmptyStack = IsWordAccepted(pda, word, new AcceptanceCondition.EmptyStack());
         Assertion.Assert(acceptedByFinalState == acceptedByEmptyStack, () => new InconsistentPDAException(String.Format("the acceptance conditions of the pda are final-state and empty-stack, but the acceptance of \"{0}\" is inconsistent: for final-state is {1}, for empty stack is {2}", word, acceptedByFinalState, acceptedByEmptyStack)));
         return(acceptedByFinalState);
     }
     return(IsWordAccepted(pda, word, pda.AcceptanceCondition));
 }
Esempio n. 28
0
        public void TestOwnRunner()
        {
            var pda = new PDA <char, char>(new AcceptanceCondition.EmptyStack(), false, 'Z', false, "Z");

            pda.AddTransition().From(0).To(0).Read('a').Pop('Z').Push("Z");
            pda.AddTransition().From(0).To(0).Read().Pop('Z').Push("Z");

            var res = PDARunner <char, char> .IsWordAccepted(pda, "a".ToCharArray());

            Assert.IsFalse(res);
        }
 private static void AddProductionsFromTransitions(PDA <A, S> pda, Dictionary <string, Nonterminal> nonTerminals, Dictionary <A, Exprinal <A> > terminals, List <Production> productions, CancellationToken token)
 {
     foreach (var state in pda.States)
     {
         foreach (var transition in state.Value.Transitions)
         {
             token.ThrowIfCancellationRequested();
             AddProductionsOfTransition(state.Value, transition, pda, nonTerminals, terminals, productions, token);
         }
     }
 }
        private static List <Production> GetInitialProductions(PDA <A, S> pda, Dictionary <string, Nonterminal> nonTerminals, Nonterminal start, CancellationToken token)
        {
            var productions = new List <Production>();

            foreach (var state in pda.States)
            {
                token.ThrowIfCancellationRequested();
                productions.Add(new Production(start, GetNonTerminal(nonTerminals, pda.InitialState, pda.FirstStackSymbol, state.Value)));
            }
            return(productions);
        }