public override EvaluateResult Execute(IRunTimeEnvironment rte) { var result = base.Execute(rte); rte.InputOutput.WriteLine(); return(result); }
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; } }
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)); }
public void ReadEvaluatePrintLoop_WithNullRte_ThrowsArgumentNullException() { IRunTimeEnvironment rte = null; ILineParser parser = MakeParser(); var repl = new ReadEvaluatePrintLoop(rte, parser); }
public void ReadEvaluatePrintLoop_WithNullParser_ThrowsArgumentNullException() { IRunTimeEnvironment rte = MakeRunTimeEnvironment("PRINT \"Windows\";"); ILineParser parser = null; var repl = new ReadEvaluatePrintLoop(rte, parser); }
public EvaluateResult Execute(IRunTimeEnvironment rte) { rte.Load(Name); var message = string.Format(Messages.ProgramLoaded, rte.Variables.LastUsedProgramName); return(new EvaluateResult(message)); }
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)); }
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); }
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)); }
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)); }
public virtual EvaluateResult Execute(IRunTimeEnvironment rte) { if (!rte.IsLoopStarted) { var loop = CreateForLoop(rte.Variables); rte.StartLoop(loop); } return(EvaluateResult.None); }
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); }
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)); }
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)); }
/// <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; }
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); }
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); }
public EvaluateResult Execute(IRunTimeEnvironment rte) { rte.TakeLastLoopStep(); if (rte.IsLastLoopOver) { rte.StopLastLoop(); } else { rte.RepeatLastLoop(); } return(EvaluateResult.None); }
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(); }
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); }
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); } }
public EvaluateResult Execute(IRunTimeEnvironment rte) { action(); return(result); }
public EvaluateResult Execute(IRunTimeEnvironment rte) { // No operation statement does nothing. return(EvaluateResult.None); }
/// <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)); }
public EvaluateResult Execute(IRunTimeEnvironment rte) { // REM does nothing. return(EvaluateResult.None); }
public EvaluateResult Execute(IRunTimeEnvironment rte) { rte.End(); return(EvaluateResult.None); }
public EvaluateResult Execute(IRunTimeEnvironment rte) { rte.Close(); return(new EvaluateResult(Messages.BasicInterpreterTerminated)); }