Upsilon/Ycicle/Program.cs

95 lines
3.1 KiB
C#
Raw Normal View History

2018-11-10 12:11:36 +00:00
using System;
2018-11-10 16:00:39 +00:00
using System.Collections.Generic;
2018-11-11 09:26:52 +00:00
using Upsilon;
using Upsilon.BaseTypes;
2018-11-11 20:03:50 +00:00
using Upsilon.Binder;
2018-11-10 12:11:36 +00:00
using Upsilon.Evaluator;
2018-11-13 16:11:20 +00:00
using UpsilonCompiler;
2018-11-10 12:11:36 +00:00
namespace Ycicle
2018-11-10 12:11:36 +00:00
{
internal static class Program
2018-11-10 12:11:36 +00:00
{
private static void Main()
2018-11-10 12:11:36 +00:00
{
Console.WriteLine("Upsilon REPL");
var showTranspiledOutput = false;
Script script = null;
2018-11-10 12:11:36 +00:00
while (true)
{
Console.Write("» ");
var input = Console.ReadLine();
switch (input)
2018-11-10 12:11:36 +00:00
{
case "exit":
return;
case "compiled":
showTranspiledOutput = !showTranspiledOutput;
break;
2018-11-10 12:11:36 +00:00
}
if (script == null)
script = new Script(input);
else
script = Script.ContinueWith(script, input);
2018-11-15 14:51:05 +00:00
if (script.Diagnostics.Messages.Count > 0)
2018-11-11 09:26:52 +00:00
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Errors were found during parsing");
foreach (var diagnosticsMessage in script.Diagnostics.Messages)
2018-11-11 09:26:52 +00:00
{
LogError(diagnosticsMessage);
}
Console.ResetColor();
continue;
}
if (showTranspiledOutput)
2018-11-11 09:26:52 +00:00
{
var transpiler = new Transpiler();
var transpiled = transpiler.TranspilerToCSharp(script.Bind());
Console.WriteLine(transpiled);
2018-11-11 09:26:52 +00:00
}
else
{
var evaluate = script.Evaluate();
2018-11-16 13:11:27 +00:00
if (evaluate == null)
continue;
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
{
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine(evaluate);
Console.ResetColor();
}
}
2018-11-10 12:11:36 +00:00
}
}
2018-11-11 09:26:52 +00:00
private static void LogError(DiagnosticsMessage message)
2018-11-11 09:26:52 +00:00
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(message.Message);
Console.ForegroundColor = ConsoleColor.Gray;
Console.Write(message.BeforeError());
Console.ForegroundColor = ConsoleColor.Red;
Console.Write(message.AtError());
Console.ForegroundColor = ConsoleColor.Gray;
Console.Write(message.AfterError());
Console.WriteLine();
}
2018-11-10 12:11:36 +00:00
}
}