正在新增编译缓存功能,用于加速与加密

This commit is contained in:
2025-10-17 15:46:44 +08:00
parent 52e8e85542
commit d3e21cad15
15 changed files with 310 additions and 31 deletions

View File

@@ -6,13 +6,25 @@ using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using static Convention.RScript.RScriptContext;
namespace Convention.RScript
{
public class RScriptEngine
public interface IRScriptEngine
{
IBasicRScriptContext context { get; }
Dictionary<string, RScriptVariableEntry> Run(string script, RScriptImportClass import = null, RScriptVariables variables = null);
IEnumerator RunAsync(string script, RScriptImportClass import = null, RScriptVariables variables = null);
SerializableClass Compile(string script, RScriptImportClass import = null, RScriptVariables variables = null);
Dictionary<string, RScriptVariableEntry> Run(SerializableClass data, RScriptImportClass import = null, RScriptVariables variables = null);
IEnumerator RunAsync(SerializableClass data, RScriptImportClass import = null, RScriptVariables variables = null);
}
public sealed class RScriptEngine : IRScriptEngine
{
private ExpressionParser parser;
private RScriptContext context;
public IBasicRScriptContext context { get; private set; }
private IEnumerable<string> SplitScript(string script)
{
@@ -122,10 +134,18 @@ namespace Convention.RScript
return statements.Where(s => !string.IsNullOrWhiteSpace(s));
}
private IBasicRScriptContext CreateContext(string[] statements, RScriptImportClass import = null, RScriptVariables variables = null)
{
return new RScriptContext(statements, import, variables);
}
private IBasicRScriptContext CreateContext(SerializableClass data, RScriptImportClass import = null, RScriptVariables variables = null)
{
return new RScriptContext(data, import, variables);
}
public Dictionary<string, RScriptVariableEntry> Run(string script, RScriptImportClass import = null, RScriptVariables variables = null)
{
parser = new(new());
context = new(SplitScript(script).ToArray(), import, variables);
context = CreateContext(SplitScript(script).ToArray(), import, variables);
context.Run(parser);
return context.GetCurrentVariables();
}
@@ -133,7 +153,31 @@ namespace Convention.RScript
public IEnumerator RunAsync(string script, RScriptImportClass import = null, RScriptVariables variables = null)
{
parser = new(new());
context = new(SplitScript(script).ToArray(), import, variables);
context = CreateContext(SplitScript(script).ToArray(), import, variables);
return context.RunAsync(parser);
}
public SerializableClass Compile(string script, RScriptImportClass import = null, RScriptVariables variables = null)
{
parser = new(new());
context = CreateContext(SplitScript(script).ToArray(), import, variables);
return context.Compile(parser);
}
public Dictionary<string, RScriptVariableEntry> Run(SerializableClass data, RScriptImportClass import = null, RScriptVariables variables = null)
{
parser = new(new());
//parser.Deserialize(data.CompileParser);
context = CreateContext(data, import, variables);
context.Run(parser);
return context.GetCurrentVariables();
}
public IEnumerator RunAsync(SerializableClass data, RScriptImportClass import = null, RScriptVariables variables = null)
{
parser = new(new());
//parser.Deserialize(data.CompileParser);
context = CreateContext(data, import, variables);
return context.RunAsync(parser);
}
}