Как запустить SyntaxNode во время выполнения - PullRequest
0 голосов
/ 18 октября 2018

В настоящее время я работаю над REPL для языка, который использует C # в качестве промежуточного языка, и после того, как несколько раз терялся, решил, что лучше будет на практике создать REPL для C # вручную.Он использует Microsoft.CodeAnalysis.CSharp.Scripting для запуска такого кода.Самое близкое, что я мог бы заставить его работать правильно:

const string prompt = "C# > ";
Script script = CSharpScript.Create("");

while (true)
{
    Console.Write(prompt);
    string input = Console.ReadLine();
    SyntaxTree tree = CSharpSyntaxTree.ParseText(input);
    script = script.ContinueWith(tree.GetRoot().NormalizeWhitespace().GetText().ToString());
    Task<ScriptState> t = script.RunAsync();
    t.Wait();
    Console.WriteLine(t.Result);
}

(Да, я знаю, что while(true) - плохая идея, но это только тестирование.) Этот код почти работает, но что-то не так: он выполняет весь код каждый раз.Поэтому вызов Console.WriteLine() на самом деле будет писать текст каждый раз.Как я могу избежать этого поведения?

...