コード例 #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);
                }
            }
        }