public void Execute(Interpreter interpreter) { var forState = interpreter.PopForLoop(); if (VariableName != forState.VariableName) { interpreter.ErrorWriter.WriteLine($"! FOR and NEXT variable name mismatch. Expected {forState.VariableName}, got {VariableName}"); interpreter.Stop(); return; } var loopValue = interpreter.ReadVariable(VariableName); loopValue++; interpreter.WriteVariable(VariableName, loopValue); if (loopValue <= forState.Limit) { interpreter.PushForLoop(forState); interpreter.GotoLine(forState.StartingLineNumber); } else { interpreter.AdvanceLine(); } }
public void Execute(Interpreter interpreter) { var result = Expression.Calculate(interpreter); interpreter.WriteVariable(VariableName, result); interpreter.AdvanceLine(); }
public void Execute(Interpreter interpreter) { interpreter.WriteVariable(_variableName, _fromValue); interpreter.AdvanceLine(); var forState = interpreter.CreateForState(_variableName, _toValue); interpreter.PushForLoop(forState); }
public void Execute(Interpreter interpreter) { interpreter.OutputWriter.Write("? "); var input = interpreter.InputReader.ReadLine(); var value = int.Parse(input); interpreter.WriteVariable(VariableName, value); interpreter.AdvanceLine(); }
public void Execute(Interpreter interpreter) { foreach (var printArgument in PrintArguments) { interpreter.OutputWriter.Write(printArgument.ToString(interpreter)); } interpreter.OutputWriter.WriteLine(); interpreter.AdvanceLine(); }
public void Execute(Interpreter interpreter) { if (Equation.Solve(interpreter)) { interpreter.GotoLine(TargetLineNumber); } else { interpreter.AdvanceLine(); } }
public void Execute(Interpreter interpreter) { try { interpreter.PopLineNumber(); interpreter.AdvanceLine(); } catch (InvalidOperationException) { interpreter.ErrorWriter.WriteLine($"! Call stack empty"); interpreter.Stop(); } }