コード例 #1
0
 public ResolveReferenceRequest(Object target, string refId, ResolveReference resolveLambda, System.Type cmpType)
 {
     Target        = target;
     RefID         = refId;
     ResolveLambda = resolveLambda;
     CmpType       = cmpType;
 }
コード例 #2
0
        protected virtual ParseObjectBase OnResolveReference(ParseObjectReference reference)
        {
            ParseResolveEventArgs args = new ParseResolveEventArgs()
            {
                Id = reference.Id, Gen = reference.Gen
            };

            ResolveReference?.Invoke(this, args);
            return(args.Object);
        }
コード例 #3
0
        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));
        }