72 lines
2.4 KiB
C#
72 lines
2.4 KiB
C#
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();
|
|
if (input == "exit") return;
|
|
|
|
script = script == null ? new Script(input) : 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();
|
|
}
|
|
}
|
|
} |