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); } } }