51 lines
1.5 KiB
C#
51 lines
1.5 KiB
C#
using System.Collections.Generic;
|
|
using Upsilon.BaseTypes;
|
|
using Upsilon.Binder;
|
|
using Upsilon.Parser;
|
|
using Upsilon.Text;
|
|
using Upsilon.Utilities;
|
|
|
|
namespace Upsilon.Evaluator
|
|
{
|
|
public class Script
|
|
{
|
|
private SourceText ScriptString { get; }
|
|
private Evaluator Evaluator { get; }
|
|
private readonly BlockStatementSyntax _parsed;
|
|
public Diagnostics Diagnostics { get; }
|
|
private Binder.Binder Binder { get; }
|
|
public EvaluationScope Scope { get; }
|
|
|
|
public Script(string scriptString, Dictionary<VariableSymbol, LuaType> variables = null)
|
|
{
|
|
ScriptString = new SourceText(scriptString);
|
|
Diagnostics = new Diagnostics(ScriptString);
|
|
_parsed = Parser.Parser.Parse(scriptString, Diagnostics);
|
|
if (variables == null)
|
|
variables = new Dictionary<VariableSymbol, LuaType>();
|
|
Binder = new Binder.Binder(Diagnostics, variables);
|
|
Evaluator = new Evaluator( Diagnostics, variables);
|
|
Scope = Evaluator.Scope;
|
|
}
|
|
|
|
public BoundScript Bind()
|
|
{
|
|
return Binder.BindScript(_parsed);
|
|
}
|
|
|
|
public object Evaluate()
|
|
{
|
|
return Evaluator.Evaluate(Bind());
|
|
}
|
|
|
|
public T Evaluate<T>() where T : LuaType
|
|
{
|
|
return (T)Evaluator.Evaluate(Bind());
|
|
}
|
|
|
|
public string PrettyPrintSyntaxTree()
|
|
{
|
|
return _parsed.Print();
|
|
}
|
|
}
|
|
} |