public override void VisitForCycleNode(ForCycleNode fc) { fc.Counter.Visit(this); fc.LeftBound.Visit(this); fc.RightBound.Visit(this); fc.Step.Visit(this); fc.Stat.Visit(this); }
public override void VisitForCycleNode(ForCycleNode fc) { Text += IndentStr() + "for "; fc.Counter.Visit(this); Text += " in ("; fc.LeftBound.Visit(this); Text += ", "; fc.RightBound.Visit(this); Text += ", "; fc.Step.Visit(this); Text += ")"; Text += Environment.NewLine; fc.Stat.Visit(this); }
public virtual void VisitForCycleNode(ForCycleNode fc) { }
public override void VisitForCycleNode(ForCycleNode fc) { Console.WriteLine(Tag + " VisitForCycleNoe"); fc.Step.Visit(this); if (GetLastLine().Accum.StartsWith(TempVariableName)) { GetLastLine().Accum = "lc" + GetLastLine().Label; } var step = GetLastLine().Accum; fc.LeftBound.Visit(this); var L = GetLastLine().Accum; fc.RightBound.Visit(this); if (GetLastLine().Accum.StartsWith(TempVariableName)) { GetLastLine().Accum = "lr" + GetLastLine().Label; } var R = GetLastLine().Accum; var initCounterLine = new ThreeAddrLine(); initCounterLine.Accum = fc.Counter.Name; initCounterLine.OpType = ThreeAddrOpType.Assign; initCounterLine.RightOp = L; initCounterLine.Label = GenNewLabel(); Data.Add(initCounterLine); var startLoopLabel = GenNewLabel(); var checkLine = new ThreeAddrLine(); checkLine.Label = startLoopLabel; checkLine.Accum = GenNewTemporaryVariable(); checkLine.LeftOp = fc.Counter.Name; checkLine.OpType = ToStringHelper.ToString(BinaryOpType.Less); checkLine.RightOp = R; Data.Add(checkLine); var whileLine = new ThreeAddrLine(); whileLine.Label = GenNewLabel(); whileLine.LeftOp = GetLastLine().Accum; whileLine.OpType = ThreeAddrOpType.IfGoto; Data.Add(whileLine); var outsideWhileLine = new ThreeAddrLine(); outsideWhileLine.Label = GenNewLabel(); outsideWhileLine.OpType = ThreeAddrOpType.Goto; Data.Add(outsideWhileLine); whileLine.RightOp = GenNewLabel(); fc.Stat.Visit(this); var counterIncLine = new ThreeAddrLine(); counterIncLine.Label = GenNewLabel(); counterIncLine.Accum = fc.Counter.Name; counterIncLine.LeftOp = fc.Counter.Name; counterIncLine.OpType = ToStringHelper.ToString(BinaryOpType.Plus); counterIncLine.RightOp = step; Data.Add(counterIncLine); var gotoStartLine = new ThreeAddrLine(); gotoStartLine.Label = GenNewLabel(); gotoStartLine.OpType = ThreeAddrOpType.Goto; gotoStartLine.RightOp = startLoopLabel; Data.Add(gotoStartLine); InsertNop(); outsideWhileLine.RightOp = GetLastLine().Label; }
public override void VisitForCycleNode(ForCycleNode fc) { fc.Stat.Visit(this); }