public void ReadEvaluatePrintLoop_WithNullParser_ThrowsArgumentNullException() { RunTimeEnvironment rte = MakeRunTimeEnvironment("PRINT \"Windows\";"); Parser parser = null; var repl = new ReadEvaluatePrintLoop(rte, parser); }
public static void Run(RenderFromFileOptions o, RunTimeEnvironment rte, Helpers sys) { var ext = (Path.GetExtension(o.Arguments)).ToLowerInvariant(); var indirectOptions = new RenderOptions(); switch (ext) { case ".yaml": indirectOptions = sys.GetOrQuit( () => new Deserializer().Deserialize <RenderOptions>(File.ReadAllText(o.Arguments)), "Unable to load/parse argument file"); break; case ".json": indirectOptions = sys.GetOrQuit(() => JsonSerializer.Deserialize <RenderOptions>(File.ReadAllText(o.Arguments)), "Unable to load/parse argument file"); break; default: sys.ExitHandler($"unrecognised extension '{ext}' for arguments file"); return; } CmdRender.Run(indirectOptions, rte, sys); }
public void ReadEvaluatePrintLoop_WithNullRte_ThrowsArgumentNullException() { RunTimeEnvironment rte = null; var parser = new Parser(); var repl = new ReadEvaluatePrintLoop(rte, parser); }
public override EvaluateResult Execute(RunTimeEnvironment rte) { var result = base.Execute(rte); rte.InputOutput.WriteLine(); return(result); }
public EvaluateResult Execute(RunTimeEnvironment 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] = CreateArrayAndFillWithZeros(indexes); var format = evaluateResultFormats[indexes.Length]; return(new EvaluateResult(name + format, indexesAsObjects)); }
public EvaluateResult Execute(RunTimeEnvironment rte) { rte.Load(Name); var message = string.Format(Messages.ProgramLoaded, rte.Variables.LastUsedProgramName); return(new EvaluateResult(message)); }
public EvaluateResult Execute(RunTimeEnvironment rte) { var seedException = Seed.GetExpression(rte.Variables); var seed = seedException.Calculate(); rte.Randomize((int)seed); return(new EvaluateResult(Messages.RandomizeSeedAccepted, seed)); }
public EvaluateResult Execute(RunTimeEnvironment rte) { string name = GetFileName(rte); rte.Save(name); var message = string.Format(Messages.ProgramSaved, rte.Variables.LastUsedProgramName); return(new EvaluateResult(message)); }
public EvaluateResult Execute(RunTimeEnvironment rte) { var numberExpression = Number.GetExpression(rte.Variables); var number = numberExpression.Calculate(); var label = number.ToString(); rte.Goto(label); return(EvaluateResult.None); }
public virtual EvaluateResult Execute(RunTimeEnvironment rte) { if (!rte.IsLoopStarted) { var loop = CreateForLoop(rte.Variables); rte.StartLoop(loop); } return(EvaluateResult.None); }
public EvaluateResult Execute(RunTimeEnvironment 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(RunTimeEnvironment 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(RunTimeEnvironment 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)); }
private static void Main(string[] args) { var inputOutput = new ConsoleInputOutput(); var parser = new Parser(); var programRepository = new FileProgramRepository(parser); using (var rte = new RunTimeEnvironment(inputOutput, programRepository)) { var readEvaluatePrintLoop = new ReadEvaluatePrintLoop(rte, parser); PrintSalute(inputOutput); Run(readEvaluatePrintLoop); } }
public EvaluateResult Execute(RunTimeEnvironment 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)); }
BasicReplEngine(string Uart, int BaudRate = 9600) { var inputOutput = new SerialInputOutput(Uart, BaudRate); var parser = new Parser(); var programRepository = new FileProgramRepository(parser); using (var rte = new RunTimeEnvironment(inputOutput, programRepository)) { var readEvaluatePrintLoop = new ReadEvaluatePrintLoop(rte, parser); PrintSalute(inputOutput); Run(readEvaluatePrintLoop); } }
private static void Main(string[] args) { var rte = new RunTimeEnvironment(new FileSystemOperations()); var sys = new Helpers(); var result = Parser.Default .ParseArguments(args, typeof(RenderOptions), typeof(RenderFromFileOptions), typeof(CmdInfo.Options) ) .WithParsed <CmdInfo.Options>(o => CmdInfo.Run(o, rte).Wait()) .WithParsed <RenderOptions>(o => CmdRender.Run(o, rte, sys)) .WithParsed <RenderFromFileOptions>(o => CmdRenderFromFile.Run(o, rte, sys)) ; }
/// <summary> /// 当DbProviderFactories.GetFactory的注册机制无效时,再尝试使用反射方式查找DbProviderFactory /// </summary> /// <param name="providerName">数据提供者名称</param> /// <returns>与数据提供者名称对应的DbProviderFactory实例</returns> private static DbProviderFactory GetDbProviderFactoryViaReflection(string providerName) { Type factoryType = (from asm in RunTimeEnvironment.GetLoadAssemblies(true) from t in asm.GetPublicTypes() where t.Namespace == providerName && typeof(DbProviderFactory).IsAssignableFrom(t) select t).FirstOrDefault(); if (factoryType == null) { return(null); } return((DbProviderFactory)factoryType.InvokeMember("Instance", BindingFlags.GetField | BindingFlags.Static | BindingFlags.Public, null, null, null)); }
public override EvaluateResult Execute(RunTimeEnvironment rte) { EvaluateResult result; var loop = CreateForLoop(rte.Variables); do { result = Statement.Execute(rte); loop.TakeStep(); }while (!loop.IsOver); return(result); }
public EvaluateResult Execute(RunTimeEnvironment 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(RunTimeEnvironment rte) { rte.TakeLastLoopStep(); if (rte.IsLastLoopOver) { rte.StopLastLoop(); } else { rte.RepeatLastLoop(); } return(EvaluateResult.None); }
public EvaluateResult Execute(RunTimeEnvironment 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(RunTimeEnvironment 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); }
public static Assembly CompileCode(string code, string outputName = null, string tempOutPath = null) { SaveLastTempCode(code, tempOutPath); // 准备编译器参数 CompilerParameters cp = new CompilerParameters(); cp.GenerateExecutable = false; if (outputName == null) { cp.GenerateInMemory = true; } else { cp.OutputAssembly = outputName; } // 添加编译必须的程序集引用 Assembly[] assemblies = RunTimeEnvironment.GetLoadAssemblies(); foreach (Assembly assembly in assemblies) { if (assembly.IsDynamic) { continue; } cp.ReferencedAssemblies.Add(assembly.Location); } // 创建编译器实例并编译代码 CSharpCodeProvider csProvider = new CSharpCodeProvider(); CompilerResults cr = csProvider.CompileAssemblyFromSource(cp, code); // 检查编译结果 if (cr.Errors != null && cr.Errors.HasErrors) { SaveLastComplieError(cr, tempOutPath); throw new CompileException { Code = code, CompilerResult = cr }; } // 获取编译结果,它是编译后的程序集 return(cr.CompiledAssembly); }
/// <summary> /// 获取带个指定修饰属性的程序集列表 /// </summary> /// <typeparam name="T"></typeparam> /// <returns></returns> public static List <Assembly> GetAssemblyList <T>() where T : Attribute { List <Assembly> list = new List <Assembly>(128); ICollection assemblies = RunTimeEnvironment.GetLoadAssemblies(true); foreach (Assembly assembly in assemblies) { if (assembly.GetAttributes <T>().Length == 0) { continue; } list.Add(assembly); } return(list); }
private string GetFileName(RunTimeEnvironment 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 static async Task Run(Options o, RunTimeEnvironment rte) { #if HASGITVERSION var isDirty = GitVersionInformation.UncommittedChanges == "0" ? "" : " (dirty build)"; Console.WriteLine( @$ " Version {GitVersionInformation.SemVer} built {GitVersionInformation.CommitDate} commit {GitVersionInformation.ShortSha} {isDirty} Useful links: - Textrude homepage: https://github.com/NeilMacMullen/Textrude - Scriban language docs: https://github.com/scriban/scriban/blob/master/doc/language.md "); var latestVersion = await UpgradeManager.GetLatestVersion(); if (latestVersion.Supersedes(GitVersionInformation.SemVer)) { Console.WriteLine($"Upgrade to version {latestVersion.Version} available"); Console.WriteLine($"Please visit {UpgradeManager.ReleaseSite} for download"); } #endif }
public EvaluateResult Execute(RunTimeEnvironment rte) { rte.Close(); return(new EvaluateResult(Messages.BasicInterpreterTerminated)); }
public static void Run(RenderOptions options, RunTimeEnvironment rte, Helpers sys) { var cmd = new CmdRender(options, rte, sys); cmd.Run(); }
public CmdRender(RenderOptions options, RunTimeEnvironment rte, Helpers sys) { _options = options; _runtime = rte; _sys = sys; }