Example #1
0
        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();
        }
Example #3
0
        public void Execute(Interpreter interpreter)
        {
            interpreter.WriteVariable(_variableName, _fromValue);
            interpreter.AdvanceLine();
            var forState = interpreter.CreateForState(_variableName, _toValue);

            interpreter.PushForLoop(forState);
        }
Example #4
0
        public void Execute(Interpreter interpreter)
        {
            interpreter.OutputWriter.Write("? ");
            var input = interpreter.InputReader.ReadLine();
            var value = int.Parse(input);

            interpreter.WriteVariable(VariableName, value);
            interpreter.AdvanceLine();
        }
Example #5
0
        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();
     }
 }