添加对 Core 的直接引用

This commit is contained in:
OLDREDSTONE
2025-03-25 15:49:57 +08:00
parent 24907abedb
commit 06c19bf10a
296 changed files with 24961 additions and 2 deletions
@@ -0,0 +1,47 @@
using sly.parser;
using sly.parser.generator;
namespace RhythmBase.Components.RDLang
{
/// <summary>
/// RDLang class provides functionality to parse and evaluate expressions written in a custom language.
/// </summary>
public static class RDLang
{
private static readonly RDVariables variables = new();
private static readonly RDLangParser parserInstance;
/// <summary>
/// Gets the collection of variables used in the custom language.
/// </summary>
/// <value>
/// The collection of variables.
/// </value>
public static RDVariables Variables { get => variables; }
/// <summary>
/// Lazy-initialized parser for the custom language expressions.
/// </summary>
internal static Lazy<Parser<RDExpressionToken, float>> Parser = new(() =>
{
var builder = new ParserBuilder<RDExpressionToken, float>();
var build = builder.BuildParser(parserInstance, ParserType.LL_RECURSIVE_DESCENT, "expression");
var parser = build.Result;
return parser;
});
static RDLang()
{
parserInstance = new RDLangParser() { Variables = variables };
}
/// <summary>
/// Tries to parse the given code string into a float result.
/// </summary>
/// <param name="code">The code string to parse.</param>
/// <param name="result">The parsed float result if the parsing is successful.</param>
/// <returns>True if parsing is successful; otherwise, false.</returns>
public static bool TryRun(string code, out float result)
{
var parseResult = Parser.Value.Parse(code);
result = parseResult.Result;
return parseResult.IsOk;
}
}
}