37 lines
1.1 KiB
C#
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);
|
|
}
|
|
}
|
|
} |