mirror of
https://gitee.com/langsisi_admin/serein-flow
synced 2026-03-02 15:50:47 +08:00
重写了Script的解释器代码,使其更加直观。重写了流程控制的部分代码,分离运行环境IOC与流程IOC。
This commit is contained in:
@@ -13,7 +13,7 @@ namespace Serein.Script
|
||||
IDynamicContext FlowContext { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否该退出了(由外部发出停止信号)
|
||||
/// 是否该退出了(由 TokenSource 控制,用于响应外部发出停止信号)
|
||||
/// </summary>
|
||||
bool IsReturn { get; }
|
||||
|
||||
@@ -40,7 +40,7 @@ namespace Serein.Script
|
||||
/// <param name="varName"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
bool SetVarValue(string varName, object value);
|
||||
bool SetVarValue(string varName, object? value);
|
||||
|
||||
/// <summary>
|
||||
/// 结束调用
|
||||
|
||||
@@ -8,17 +8,16 @@ namespace Serein.Script.Node
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// 赋值节点
|
||||
/// 变量赋值节点
|
||||
/// </summary>
|
||||
public class AssignmentNode : ASTNode
|
||||
{
|
||||
/// <summary>
|
||||
/// 变量名称
|
||||
/// </summary>
|
||||
//public string Variable { get; }
|
||||
public ASTNode Target { get; }
|
||||
/// <summary>
|
||||
/// 对应的节点
|
||||
/// 值来源
|
||||
/// </summary>
|
||||
public ASTNode Value { get; }
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ namespace Serein.Script
|
||||
/// <summary>
|
||||
/// 定义的变量
|
||||
/// </summary>
|
||||
private Dictionary<string, object> _variables = new Dictionary<string, object>();
|
||||
private Dictionary<string, object?> _variables = new Dictionary<string, object?>();
|
||||
|
||||
/// <summary>
|
||||
/// 取消令牌源,用于控制脚本的执行
|
||||
|
||||
@@ -13,4 +13,5 @@ namespace Serein.Script
|
||||
Message = $"异常信息 : {message} ,代码在第{node.Row}行: {node.Code.Trim()}";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -10,6 +10,9 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace Serein.Script
|
||||
{
|
||||
|
||||
|
||||
|
||||
public class SereinScript
|
||||
{
|
||||
/// <summary>
|
||||
@@ -47,7 +50,7 @@ namespace Serein.Script
|
||||
}
|
||||
Dictionary<ASTNode, Type> symbolInfos = TypeAnalysis.NodeSymbolInfos.ToDictionary();
|
||||
SereinScriptInterpreter Interpreter = new SereinScriptInterpreter(symbolInfos);
|
||||
return await Interpreter.InterpretAsync(context, programNode);
|
||||
return await Interpreter.InterpreterAsync(context, programNode);
|
||||
}
|
||||
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -198,7 +198,6 @@ namespace Serein.Script
|
||||
this._index = token.StartIndex;
|
||||
}
|
||||
|
||||
|
||||
internal Token NextToken()
|
||||
{
|
||||
|
||||
@@ -525,7 +524,6 @@ namespace Serein.Script
|
||||
return ReadOnlySpan<char>.Empty;
|
||||
}
|
||||
|
||||
|
||||
public int GetIndex()
|
||||
{
|
||||
return _index;
|
||||
|
||||
@@ -75,7 +75,6 @@ namespace Serein.Script
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 类型获取
|
||||
/// </summary>
|
||||
@@ -542,6 +541,8 @@ namespace Serein.Script
|
||||
break;
|
||||
case ObjectInstantiationNode objectInstantiationNode: // 类型实例化
|
||||
break;
|
||||
case CtorAssignmentNode ctorAssignmentNode:
|
||||
break;
|
||||
case ExpressionNode expressionNode: // 类型表达式(链式调用)
|
||||
break;
|
||||
case MemberAccessNode memberAccessNode: // 对象成员访问
|
||||
|
||||
Reference in New Issue
Block a user