public override void Visit(LoopCommand visitee) { if (visitee.Times.HasValue) { // とりあえず有限ループは展開する実装とする。メモリ効率的に問題があればループのまま演奏する実装を検討する for (int i = 0; i < visitee.Times.Value; ++i) { foreach (var child in visitee.Content) { if (child is LoopBreakCommand) { if (i == visitee.Times.Value - 1) { break; } else { continue; } } child.Accept(this); } } } else { var start = this.result.Count; foreach (var child in visitee.Content) { child.Accept(this); } this.result.Add(new JumpInstruction(start)); } }
public virtual void Visit(LoopCommand visitee) { }