/// <summary> /// Parse a file into a stack queue. /// </summary> /// <param name="text">Text to parse.</param> /// <returns>Returns compiler output.</returns> public static CompilerOutput ParseString(string text) { var variables = new List<string>(); var functions = new Dictionary<string, Queue<MuftecStackItem>>(); var defines = new Dictionary<string, string>(); var appState = new ApplicationCore(variables, functions, defines); var evaluator = new EvaluatorState(appState); var lineNum = 1; // Get each line to count foreach (var line in text.Replace("\r", "").Split('\n')) { try { evaluator.EvaluateLine(line, lineNum); lineNum++; } catch (Exception e) { Console.WriteLine("Error parsing at line " + lineNum); Console.WriteLine("-----"); Console.WriteLine(line); Console.WriteLine("-----"); #if DEBUG throw; #else Console.WriteLine(e); Console.WriteLine("-----"); return null; #endif } } // Return compiler output return new CompilerOutput { Variables = variables, Functions = functions, MainFunctionName = evaluator.LastFunction, MainFunction = new MuftecStackItem(evaluator.LastFunction, MuftecAdvType.Function) }; }
public ConditionalFunctionEvaluatorState(ApplicationCore core) : base(core) { }
public EvaluatorState(ApplicationCore core) { Core = core; }
public ConditionalState(ApplicationCore core) { Core = core; _trueCore = new ApplicationCore(core.Variables, core.Functions, core.Defines, new Queue<MuftecStackItem>(), core.LineNumber); _falseCore = new ApplicationCore(core.Variables, core.Functions, core.Defines, new Queue<MuftecStackItem>(), core.LineNumber); }
public FunctionState(ApplicationCore core) { Core = core; FunctionCore = CreateFunctionCore(core); Evaluator = new FunctionEvaluatorState(FunctionCore); }
private ApplicationCore CreateFunctionCore(ApplicationCore existingCore) { var queue = new Queue<MuftecStackItem>(); return new ApplicationCore(existingCore.Variables, existingCore.Functions, existingCore.Defines, queue, existingCore.LineNumber); }