如何在运行时运行SyntaxNode

时间:2018-10-18 18:02:09

标签: c# scripting roslyn

我目前正在为使用C#作为中间语言的语言编写REPL,并且在迷失了几次之后,决定最好在实践中为C#手动创建REPL。它使用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()都会写文本。如何避免这种行为?

0 个答案:

没有答案