Пример #1
0
        private static void AddTransitionsToTM(XElement xmlTm, TMCB <int, string> tm, Dictionary <int, State <string> > idStateDict)
        {
            foreach (var link in xmlTm.Elements().Where(el => el.Name.LocalName == XmlNames.Links).First().Elements().Where(el => el.Name.LocalName == XmlNames.Link))
            {
                var start       = int.Parse(link.Attribute(XmlAttr.Start).Value);
                var target      = int.Parse(link.Attribute(XmlAttr.End).Value);
                var startState  = idStateDict[start];
                var targetState = idStateDict[target];

                foreach (var transitionXmlElement in link.Elements().Where(el => el.Name.LocalName == XmlNames.TransitionGroup).First().Elements().Where(el => el.Name.LocalName == XmlNames.Transition))
                {
                    var transitionsForTapes = transitionXmlElement.Value.Split('|');
                    var newTransition       = new Transition <int, string>();
                    var i = 0;
                    foreach (var t in transitionsForTapes)
                    {
                        var inputSymbol  = ParseSymbol(t[0]);
                        var outputSymbol = ParseSymbol(t[2]);
                        var moveSymbol   = t[4];

                        newTransition.AddReadCondition(i, inputSymbol);
                        if (inputSymbol != outputSymbol)
                        {
                            newTransition.AddWriteAction(i, outputSymbol);
                        }
                        if (moveSymbol == 'R')
                        {
                            newTransition.AddMoveAction(i, Directions.Right);
                        }
                        if (moveSymbol == 'L')
                        {
                            newTransition.AddMoveAction(i, Directions.Left);
                        }

                        i++;
                    }


                    if (startState != targetState)
                    {
                        newTransition.TargetState = targetState;
                    }

                    tm.AddTransition(startState, newTransition);
                }
            }
        }
Пример #2
0
        public static TMCB <int, string> ParseTMFromXml(XElement xmlTM)
        {
            var QandF = GetStates(xmlTM);
            var Q     = QandF.Item1;
            var F     = QandF.Item2;

            int blank = -1;

            var initialStateXml = xmlTM.Elements().Where(el => el.Name.LocalName == XmlNames.Nodes).First().Elements().Where(el => el.Name.LocalName == XmlNames.InitialState).First();
            int initialStateId  = int.Parse(initialStateXml.Attribute(XmlAttr.Id).Value);
            var initialState    = new State <string>(initialStateId, initialStateId.ToString());

            Q.Add(initialState);
            if (bool.Parse(initialStateXml.Attribute(XmlAttr.IsFinal).Value))
            {
                F.Add(initialState);
            }

            var idStateDict = new Dictionary <int, State <string> >();

            foreach (var q in Q)
            {
                idStateDict.Add(q.id, q);
            }

            var gammaAndSigma = ParseGammaAndSigma(xmlTM, blank);
            var gamma         = gammaAndSigma.Item1;
            var sigma         = gammaAndSigma.Item2;

            var tm = new TMCB <int, string>(Q, F, sigma, gamma, blank);

            tm.q0 = initialState;

            AddTransitionsToTM(xmlTM, tm, idStateDict);

            return(tm);
        }
        static bool toTM(WExpr program)
        {
            TMCB <int, int> M = program.ToTMCB(-1);

            return(true);
        }