protected virtual ParseObjectBase OnResolveReference(ParseObjectReference reference) { ParseResolveEventArgs args = new ParseResolveEventArgs() { Id = reference.Id, Gen = reference.Gen }; ResolveReference?.Invoke(this, args); return(args.Object); }
public Evaluation Evaluate(ExpressionOptions options, Token token) { if (token is ListToken listToken) { return(EvaluateList(options, listToken.Children)); } if (token is ValueToken valueToken) { string value = valueToken.Value; switch (valueToken.Type) { case TokenType.DecimalDigit: return(new Evaluation(CharUnicodeInfo.GetNumericValue(value[0]))); case TokenType.DecimalNumber: if (value.Length == 1) { return(new Evaluation(CharUnicodeInfo.GetNumericValue(value[0]))); } else { var parsed = double.Parse(value, NumberStyles.Float, CultureInfo.InvariantCulture); return(new Evaluation(parsed)); } case TokenType.Name: return(ResolveReference.Invoke(valueToken.Value)); default: return(new Evaluation(EErrorCode.SyntaxError)); } } else if (token is FunctionToken funcToken) { return(EvaluateFunction(options, funcToken)); } return(new Evaluation(EErrorCode.Undefined)); }