Пример #1
0
        public void EvaluateArrayDotExpression()
        {
            BindingEnvironment environment = new BindingEnvironment();

            DynamicObject data = new DynamicObject();
            data.SetValue("Numbers", new string[] { "one", "two", "three" });

            environment.SetValue("data", data);

            IExpression expression = new ArrayExpression(new DotExpression(new VariableExpression("data"), "Numbers"), new IExpression[] { new ConstantExpression(1) });

            object result = expression.Evaluate(environment);

            Assert.IsNotNull(result);
            Assert.AreEqual("two", result);
        }
Пример #2
0
        public void EvaluateArrayVariableExpression()
        {
            BindingEnvironment environment = new BindingEnvironment();

            environment.SetValue("array", new string[] { "one", "two", "three" });

            IExpression expression = new ArrayExpression(new VariableExpression("array"), new IExpression[] { new ConstantExpression(1) });

            object result = expression.Evaluate(environment);

            Assert.IsNotNull(result);
            Assert.AreEqual("two", result);
        }
Пример #3
0
        private IExpression ParseTermExpression()
        {
            IExpression expression = this.ParseSimpleTermExpression();

            while (this.TryParse(TokenType.Operator, ".") || this.TryParse(TokenType.Separator, "[", "("))
            {
                if (this.TryParse(TokenType.Separator, "("))
                    expression = new InvokeExpressionExpression(expression, this.ParseArgumentList());
                else if (this.TryParse(TokenType.Operator, "."))
                {
                    this.lexer.NextToken();
                    string name = this.ParseName();
                    List<IExpression> arguments = null;

                    if (this.TryParse(TokenType.Separator, "("))
                        arguments = this.ParseArgumentList();

                    expression = new DotExpression(expression, name, arguments);
                }
                else
                    expression = new ArrayExpression(expression, this.ParseArrayArgumentList());
            }

            return expression;
        }