public override void VisitGoToNode(GoToNode g) { string labelName = g.Label.Name; // При посещении узла GoTо создаем соответсвующую команду трехадресного кода var gt = new TACNodes.Goto(); code.AddNode(gt); // Если метка ведет в уже преобразованную часть программы if (labeledTANodes.ContainsKey(labelName)) { // Получаем помеченную строку треадресного кода и задаем ее как цель перехода var target = labeledTANodes[labelName]; gt.TargetLabel = target.Label; } else { // Иначе помещаем строку в лист ожидания пока помеченная часть программы не будет преобразована if (!forwardGotos.ContainsKey(labelName)) { forwardGotos.Add(labelName, new List <TACNodes.Goto>()); } forwardGotos[labelName].Add(gt); } }
public void VisitGoToNode(GoToNode a) { string label = Mark(a); _nodes.AppendLine($"{label} [label = \"GoTo: {a.Label.Name}\"]"); a.Label.Visit(this); _edges.AppendLine($"{label} -> {Mark(a.Label)}"); }
/// <summary> /// Посещение узла с оператором goto /// </summary> /// <param name="g">Узел GoToNode</param> public virtual void VisitGoToNode(GoToNode g) { Text += IndentStr() + "goto "; g.Label.Visit(this); }
public virtual void VisitGoToNode(GoToNode g) { }
public virtual void VisitGoToNode(GoToNode g) { g.Label.Visit(this); }
public override void VisitGoToNode(GoToNode g) { Text += IndentStr() + "goto "; g.Label.Visit(this); }