public Error[] Compile() { if (!compilationTurnedOn) { return(new Error[] { new Error("Uncompiled program.") }); } //D.Log("Compiling " + this.ToString()); StopAndReset(); //_sprakRunner = new SprakRunner(new StringReader(sourceCodeContent), FunctionDefinitions.ToArray(), VariableDefinitions.ToArray()); if (_sprakRunner == null) { //D.Log("Creating new SprakRunner for " + this.ToString()); _sprakRunner = new SprakRunner(new StringReader(sourceCodeContent), FunctionDefinitions.ToArray(), VariableDefinitions.ToArray()); } else { _sprakRunner.Reset(); } PrintErrorsToD(); return(GetErrors()); }
static void Main(string[] args) { string filename = ""; //"../Program1"; if (args.Length > 0) { filename = args [0]; } else { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("No program file given"); return; } TextReader tr = File.OpenText(filename); //StringReader programString = new StringReader("g()\nfloat g() {\n print(42)\n }"); FunctionDefinition[] functionDefinitions = new FunctionDefinition[] { new FunctionDefinition("void", "print", new string[] { "string" }, new string[] { "text" }, print, FunctionDocumentation.Default()) }; SprakRunner runner = new SprakRunner(tr, functionDefinitions); runner.run(int.MaxValue); }
public void SetVariableFromOutsideProgram() { s_output = new List <string>(); TextReader programString = File.OpenText("code50.txt"); // print(MAGIC_NUMBER) FunctionDefinition[] funcs = new FunctionDefinition[1]; funcs[0] = new FunctionDefinition("void", "print", new string[] { "string" }, new string[] { "text" }, new ExternalFunctionCreator.OnFunctionCall(print), FunctionDocumentation.Default() ); VariableDefinition[] vars = new VariableDefinition[3]; vars[0] = new VariableDefinition("MAGIC_NUMBER", new ReturnValue(43)); vars[1] = new VariableDefinition("MAGIC_BOOL", new ReturnValue(true)); vars[2] = new VariableDefinition("MAGIC_STRING", new ReturnValue("hej")); SprakRunner program = new SprakRunner(programString, funcs, vars); program.run(); Assert.AreEqual(0, program.getRuntimeErrorHandler().getErrors().Count); Assert.AreEqual("43", s_output[0]); Assert.AreEqual("true", s_output[1]); Assert.AreEqual("hej", s_output[2]); }
public void ArrayAsArgumentListTest() { DemoClassThree dc3 = new DemoClassThree(); FunctionDefinition[] defs = FunctionDefinitionCreator.CreateDefinitions(dc3, typeof(DemoClassThree)); Assert.AreEqual(1, defs.Length); List <FunctionDefinition> moreFunctionDefinitions = new List <FunctionDefinition> { GetPrintFunction() }; moreFunctionDefinitions.AddRange(defs); TextReader programString = File.OpenText("code75.txt"); SprakRunner program = new SprakRunner(programString, moreFunctionDefinitions.ToArray()); program.run(); foreach (var e in program.getRuntimeErrorHandler().getErrors()) { Console.WriteLine(e); } foreach (var e in program.getCompileTimeErrorHandler().getErrors()) { Console.WriteLine(e); } Assert.AreEqual(0, program.getRuntimeErrorHandler().getErrors().Count); Assert.AreEqual(0, program.getCompileTimeErrorHandler().getErrors().Count); }
void DeleteSprakRunner() { if (_sprakRunner != null) { _sprakRunner.HardReset(); } _sprakRunner = null; }
public void CallingFunctionWithWrongArgumentType_MANUAL_FUNCTION_DEFINITION() { TextReader programString = File.OpenText("code72.txt"); FunctionDefinition[] functionDefinitions = new FunctionDefinition[] { new FunctionDefinition( "number", "ThisFunctionTakesANumber", new string[] { "number" }, new string[] { "x" }, ThisFunctionTakesANumber, FunctionDocumentation.Default()), GetPrintFunction() }; SprakRunner program = new SprakRunner(programString, functionDefinitions); program.run(); Assert.AreEqual(0, program.getCompileTimeErrorHandler().getErrors().Count); }
public void CallingFunctionWithWrongArgumentType_USING_FUNCTION_DEFINITION_CREATOR() { TextReader programString = File.OpenText("code73.txt"); ClassWithFunction c = new ClassWithFunction(); FunctionDefinition[] funcDefs = FunctionDefinitionCreator.CreateDefinitions(c, typeof(ClassWithFunction)); List <FunctionDefinition> moreFunctionDefinitions = new List <FunctionDefinition> { GetPrintFunction() }; moreFunctionDefinitions.AddRange(funcDefs); SprakRunner program = new SprakRunner(programString, moreFunctionDefinitions.ToArray()); program.run(); Assert.AreEqual(0, program.getCompileTimeErrorHandler().getErrors().Count); }
public void CallFunctionThatThrowsException() { DemoClassFour dc3 = new DemoClassFour(); FunctionDefinition[] defs = FunctionDefinitionCreator.CreateDefinitions(dc3, typeof(DemoClassFour)); Assert.AreEqual(1, defs.Length); List <FunctionDefinition> moreFunctionDefinitions = new List <FunctionDefinition> { GetPrintFunction() }; moreFunctionDefinitions.AddRange(defs); TextReader programString = File.OpenText("code77.txt"); SprakRunner program = new SprakRunner(programString, moreFunctionDefinitions.ToArray()); program.run(); Assert.AreEqual(0, program.getCompileTimeErrorHandler().getErrors().Count); Assert.AreEqual(1, program.getRuntimeErrorHandler().getErrors().Count); program.getRuntimeErrorHandler().printErrorsToConsole(); }
static void Main(string[] args) { string filename = "../Program1"; if (args.Length > 0) { filename = args[0]; } TextReader tr = File.OpenText(filename); //StringReader programString = new StringReader("g()\nfloat g() {\n print(42)\n }"); FunctionDefinition[] functionDefinitions = new FunctionDefinition[] { new FunctionDefinition("void", "print", new string[] { "string" }, new string[] { "text" }, print, FunctionDocumentation.Default()) }; SprakRunner runner = new SprakRunner(tr, functionDefinitions); bool success = runner.Start(); if (success) { while (runner.Step() == InterpreterTwo.Status.OK) { } } Console.WriteLine("OUTPUT: "); foreach (string s in m_output) { Console.WriteLine(s); } //runner.printTree(true); //Console.In.ReadLine(); }
public void SetVariableFromOutsideProgram() { s_output = new List<string>(); TextReader programString = File.OpenText("code50.txt"); // print(MAGIC_NUMBER) FunctionDefinition[] funcs = new FunctionDefinition[1]; funcs[0] = new FunctionDefinition("void", "print", new string[] { "string" }, new string[] { "text" }, new ExternalFunctionCreator.OnFunctionCall(print), FunctionDocumentation.Default() ); VariableDefinition[] vars = new VariableDefinition[3]; vars[0] = new VariableDefinition("MAGIC_NUMBER", new ReturnValue(43)); vars[1] = new VariableDefinition("MAGIC_BOOL", new ReturnValue(true)); vars[2] = new VariableDefinition("MAGIC_STRING", new ReturnValue("hej")); SprakRunner program = new SprakRunner(programString, funcs, vars); program.run(); Assert.AreEqual(0, program.getRuntimeErrorHandler().getErrors().Count); Assert.AreEqual("43", s_output[0]); Assert.AreEqual("true", s_output[1]); Assert.AreEqual("hej", s_output[2]); }
public void DotNotation() { s_output = new List<string> (); StringReader programString = new StringReader( @"var id = 100 id.foo(42, true)" ); FunctionDefinition[] funcs = new FunctionDefinition[1]; funcs[0] = new FunctionDefinition("void", "RemoteFunctionCall", new string[] { "number", "string", "array" }, new string[] { "id", "functionName", "args" }, new ExternalFunctionCreator.OnFunctionCall(ExternalFunctionCall), FunctionDocumentation.Default() ); VariableDefinition[] vars = new VariableDefinition[] {}; SprakRunner program = new SprakRunner(programString, funcs, vars); program.run(); Assert.AreEqual (1, s_output.Count); Assert.AreEqual ("id = 100, functionName = foo, args = [42, true]", s_output[0]); Assert.AreEqual(0, program.getCompileTimeErrorHandler().getErrors().Count); }
public void ComplexDotNotation() { s_output = new List<string> (); StringReader programString = new StringReader( @"var a = 10 number inc(number x) return x + 5 end (inc(a*a)).foo(inc(1), inc(2), [inc(3), inc(4)])" ); FunctionDefinition[] funcs = new FunctionDefinition[1]; funcs[0] = new FunctionDefinition("void", "RemoteFunctionCall", new string[] { "number", "string", "array" }, new string[] { "id", "functionName", "args" }, new ExternalFunctionCreator.OnFunctionCall(ExternalFunctionCall), FunctionDocumentation.Default() ); VariableDefinition[] vars = new VariableDefinition[] {}; SprakRunner program = new SprakRunner(programString, funcs, vars); program.run(); Assert.AreEqual (1, s_output.Count); Assert.AreEqual ("id = 105, functionName = foo, args = [6, 7, [8, 9]]", s_output[0]); Assert.AreEqual(0, program.getCompileTimeErrorHandler().getErrors().Count); }