using System; using Upsilon; using Upsilon.Evaluator; namespace Ycicle { internal static class Program { private static void Main() { Console.WriteLine("Upsilon REPL"); Script script = null; while (true) { Console.Write("» "); var input = Console.ReadLine(); switch (input) { case "exit": return; } if (script == null) script = new Script(input); else script = Script.ContinueWith(script, input); if (script.Diagnostics.Messages.Count > 0) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Errors were found during parsing"); foreach (var diagnosticsMessage in script.Diagnostics.Messages) { LogError(diagnosticsMessage); } Console.ResetColor(); continue; } var evaluate = script.Evaluate(); if (script.Diagnostics.Messages.Count > 0) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Errors were found during evaluating"); foreach (var diagnosticsMessage in script.Diagnostics.Messages) { LogError(diagnosticsMessage); } Console.ResetColor(); } else { if (evaluate == null) continue; Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine(evaluate); Console.ResetColor(); } } } private static void LogError(DiagnosticsMessage message) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(message.Message); Console.ForegroundColor = ConsoleColor.Gray; Console.Write(message.GetDiagnosticPosition() + " "); Console.Write(message.LineBeforeError()); Console.ForegroundColor = ConsoleColor.Red; Console.Write(message.AtError()); Console.ForegroundColor = ConsoleColor.Gray; Console.Write(message.LineAfterError()); Console.WriteLine(); } } }