Exemplo n.º 1
0
        public override EvaluateResult Execute(IRunTimeEnvironment rte)
        {
            var result = base.Execute(rte);

            rte.InputOutput.WriteLine();
            return(result);
        }
Exemplo n.º 2
0
        public static void GetBounds(this Range range, IRunTimeEnvironment rte, out int start, out int count)
        {
            if (range.IsDefined)
            {
                var lowLine  = new Line(range.Min, new Nop());
                var highLine = new Line(range.Max, new Nop());

                var lowIndex  = rte.BinarySearch(lowLine);
                var highIndex = rte.BinarySearch(highLine);

                if (lowIndex < 0)
                {
                    lowIndex = ~lowIndex;
                }

                if (highIndex < 0)
                {
                    highIndex = ~highIndex - 1;
                }

                start = lowIndex;
                count = highIndex - lowIndex + 1;
            }
            else
            {
                start = 0;
                count = rte.Lines.Count;
            }
        }
Exemplo n.º 3
0
        public EvaluateResult Execute(IRunTimeEnvironment rte)
        {
            var name             = Array.Name;
            var indexesAsObjects = Array.Indexes
                                   .Select(i => i.GetExpression(rte.Variables))
                                   .Select(e => e.Calculate())
                                   .ToArray();
            var indexes = indexesAsObjects.Select(o => (int)o)
                          .ToArray();

            if (indexes.Any(index => index == 0))
            {
                throw new InvalidOperationException(ErrorMessages.ZeroArraySize);
            }

            if (indexes.Length < 1 || indexes.Length > 4)
            {
                throw new InvalidOperationException(ErrorMessages.UnsupportedArrayDimension);
            }

            rte.Variables[name] = System.Array.CreateInstance(typeof(object), indexes);

            var format = evaluateResultFormats[indexes.Length];

            return(new EvaluateResult(name + format, indexesAsObjects));
        }
Exemplo n.º 4
0
        public void ReadEvaluatePrintLoop_WithNullRte_ThrowsArgumentNullException()
        {
            IRunTimeEnvironment rte    = null;
            ILineParser         parser = MakeParser();

            var repl = new ReadEvaluatePrintLoop(rte, parser);
        }
Exemplo n.º 5
0
        public void ReadEvaluatePrintLoop_WithNullParser_ThrowsArgumentNullException()
        {
            IRunTimeEnvironment rte    = MakeRunTimeEnvironment("PRINT \"Windows\";");
            ILineParser         parser = null;

            var repl = new ReadEvaluatePrintLoop(rte, parser);
        }
Exemplo n.º 6
0
        public EvaluateResult Execute(IRunTimeEnvironment rte)
        {
            rte.Load(Name);

            var message = string.Format(Messages.ProgramLoaded, rte.Variables.LastUsedProgramName);

            return(new EvaluateResult(message));
        }
Exemplo n.º 7
0
        public EvaluateResult Execute(IRunTimeEnvironment rte)
        {
            var seedException = Seed.GetExpression(rte.Variables);
            var seed          = seedException.Calculate();

            rte.Randomize((int)seed);

            return(new EvaluateResult(Messages.RandomizeSeedAccepted, seed));
        }
Exemplo n.º 8
0
        public EvaluateResult Execute(IRunTimeEnvironment rte)
        {
            var numberExpression = Number.GetExpression(rte.Variables);
            var number           = numberExpression.Calculate();
            var label            = number.ToString();

            rte.Goto(label);

            return(EvaluateResult.None);
        }
Exemplo n.º 9
0
        public EvaluateResult Execute(IRunTimeEnvironment rte)
        {
            string name = GetFileName(rte);

            rte.Save(name);

            var message = string.Format(Messages.ProgramSaved, rte.Variables.LastUsedProgramName);

            return(new EvaluateResult(message));
        }
Exemplo n.º 10
0
        public EvaluateResult Execute(IRunTimeEnvironment rte)
        {
            var left          = Left.GetExpression(rte.Variables);
            var right         = Right.GetExpression(rte.Variables);
            var rightAsObject = Expression.Convert(right, typeof(object));
            var assignment    = Expression.Assign(left, rightAsObject);
            var value         = assignment.Calculate();
            var result        = Constant.ToString(value);

            return(new EvaluateResult(result));
        }
Exemplo n.º 11
0
        public virtual EvaluateResult Execute(IRunTimeEnvironment rte)
        {
            if (!rte.IsLoopStarted)
            {
                var loop = CreateForLoop(rte.Variables);

                rte.StartLoop(loop);
            }

            return(EvaluateResult.None);
        }
Exemplo n.º 12
0
        public virtual EvaluateResult Execute(IRunTimeEnvironment rte)
        {
            foreach (var expression in Expressions)
            {
                var compiled      = expression.GetExpression(rte.Variables);
                var value         = compiled.Calculate();
                var valueAsString = value == null ? string.Empty : value.ToString();
                rte.InputOutput.Write(valueAsString);
            }

            return(EvaluateResult.None);
        }
Exemplo n.º 13
0
        public EvaluateResult Execute(IRunTimeEnvironment rte)
        {
            int start;
            int count;

            Range.GetBounds(rte, out start, out count);

            rte.RemoveRange(start, count);

            var message = string.Format(Messages.RemoveResult, count);

            return(new EvaluateResult(message));
        }
Exemplo n.º 14
0
        public EvaluateResult Execute(IRunTimeEnvironment rte)
        {
            rte.InputOutput.Write(Prompt);
            var line = rte.InputOutput.ReadLine();

            var rValue     = ParseToObjectExpression(line);
            var lValue     = LValue.GetExpression(rte.Variables);
            var assignment = Expression.Assign(lValue, rValue);

            var value  = assignment.Calculate();
            var result = value.ToString();

            return(new EvaluateResult(result));
        }
Exemplo n.º 15
0
        /// <summary>
        /// Creates an instance of Read-Evaluate-Print loop object.
        /// </summary>
        /// <param name="rte"></param>
        /// <param name="parser"></param>
        public ReadEvaluatePrintLoop(IRunTimeEnvironment rte, ILineParser parser)
        {
            if (rte == null)
            {
                throw new ArgumentNullException("rte");
            }

            if (parser == null)
            {
                throw new ArgumentNullException("parser");
            }

            this.rte    = rte;
            this.parser = parser;
        }
Exemplo n.º 16
0
        public override EvaluateResult Execute(IRunTimeEnvironment rte)
        {
            EvaluateResult result;

            var loop = CreateForLoop(rte.Variables);

            do
            {
                result = Statement.Execute(rte);

                loop.TakeStep();
            }while (!loop.IsOver);

            return(result);
        }
Exemplo n.º 17
0
        public EvaluateResult Execute(IRunTimeEnvironment rte)
        {
            int start;
            int count;

            Range.GetBounds(rte, out start, out count);
            var filteredLines = rte.Lines.Skip(start).Take(count);

            foreach (var line in filteredLines)
            {
                rte.InputOutput.WriteLine(line.ToString());
            }

            return(EvaluateResult.None);
        }
Exemplo n.º 18
0
        public EvaluateResult Execute(IRunTimeEnvironment rte)
        {
            rte.TakeLastLoopStep();

            if (rte.IsLastLoopOver)
            {
                rte.StopLastLoop();
            }
            else
            {
                rte.RepeatLastLoop();
            }

            return(EvaluateResult.None);
        }
Exemplo n.º 19
0
        public EvaluateResult Execute(IRunTimeEnvironment rte)
        {
            var result = rte.Run();

            if (result == ProgramResult.Broken)
            {
                return(new EvaluateResult(Messages.CtrlCPressed));
            }

            if (result == ProgramResult.Completed)
            {
                return(new EvaluateResult(Messages.ProgramCompleted));
            }

            throw new InvalidOperationException();
        }
Exemplo n.º 20
0
        public EvaluateResult Execute(IRunTimeEnvironment rte)
        {
            var conditionExpression = Condition.GetExpression(rte.Variables);
            var condition           = (bool)conditionExpression.Calculate();

            if (condition)
            {
                return(Then.Execute(rte));
            }

            if (Else != null)
            {
                return(Else.Execute(rte));
            }

            return(EvaluateResult.None);
        }
Exemplo n.º 21
0
 private string GetFileName(IRunTimeEnvironment rte)
 {
     if (Name == null)
     {
         if (rte.Variables.LastUsedProgramName == null)
         {
             rte.InputOutput.Write(Messages.InputProgramName);
             return(rte.InputOutput.ReadLine());
         }
         else
         {
             return(rte.Variables.LastUsedProgramName);
         }
     }
     else
     {
         return(Name);
     }
 }
Exemplo n.º 22
0
 public EvaluateResult Execute(IRunTimeEnvironment rte)
 {
     action();
     return(result);
 }
Exemplo n.º 23
0
 public EvaluateResult Execute(IRunTimeEnvironment rte)
 {
     // No operation statement does nothing.
     return(EvaluateResult.None);
 }
Exemplo n.º 24
0
 /// <summary>
 /// Executes the statement of the <see cref="RunningLine"/>.
 /// </summary>
 /// <param name="rte">The run-time environment.</param>
 /// <returns>The result of the statement.</returns>
 public EvaluateResult ExecuteCurrentStatement(IRunTimeEnvironment rte)
 {
     return(RunningLine.Statement.Execute(rte));
 }
Exemplo n.º 25
0
 public EvaluateResult Execute(IRunTimeEnvironment rte)
 {
     // REM does nothing.
     return(EvaluateResult.None);
 }
Exemplo n.º 26
0
        public EvaluateResult Execute(IRunTimeEnvironment rte)
        {
            rte.End();

            return(EvaluateResult.None);
        }
Exemplo n.º 27
0
        public EvaluateResult Execute(IRunTimeEnvironment rte)
        {
            rte.Close();

            return(new EvaluateResult(Messages.BasicInterpreterTerminated));
        }