Upsilon/Upsilon/Evaluator/Script.cs

37 lines
1.1 KiB
C#

using System.Collections.Generic;
using Upsilon.Binder;
using Upsilon.Parser;
using Upsilon.Text;
namespace Upsilon.Evaluator
{
public class Script
{
private SourceText ScriptString { get; }
private Evaluator Evaluator { get; }
private readonly ScriptSyntax _parsed;
public Diagnostics Diagnostics { get; }
private Binder.Binder Binder { get; }
public Script(string scriptString, Dictionary<VariableSymbol, object> variables = null)
{
ScriptString = new SourceText(scriptString);
Diagnostics = new Diagnostics(ScriptString);
_parsed = Parser.Parser.Parse(scriptString, Diagnostics);
Binder = new Binder.Binder(new BoundScope(variables, null), Diagnostics);
Evaluator = new Evaluator(this, Diagnostics, variables);
}
public object Evaluate()
{
var bound = Binder.BindScript(_parsed);
return Evaluator.Evaluate(bound);
}
public T Evaluate<T>()
{
var bound = Binder.BindScript(_parsed);
return (T)Evaluator.Evaluate(bound);
}
}
}