private AST Group2()
        {
            var ast = Group1();

            if (CurrentToken.TokenType == TokenType.Function)
            {
                if (ast != null)
                {
                    ThrowUnexpectedTokenTypeException();
                }

                switch (CurrentToken.Value)
                {
                case "ToString":
                    ast = new ToStringFunction(CurrentToken);
                    break;

                case "DateTime.Now":
                    ast = new DateTimeFunction(CurrentToken);
                    break;

                case "string.Concat":
                    ast = new StringConcatFunction(CurrentToken);
                    break;

                case "AddMonths":
                    ast = new AddMonths(CurrentToken);
                    break;

                default:
                    ThrowUnexpectedTokenTypeException();
                    break;
                }

                CurrentToken = _lexer.GetNextToken();

                if (CurrentToken.TokenType != TokenType.OpenParenthesis)
                {
                    ThrowUnexpectedTokenTypeException();
                }

                CurrentToken = _lexer.GetNextToken();

                while (CurrentToken.TokenType != TokenType.CloseParenthesis)
                {
                    ast.ChildNodes.Add(Group10());

                    if (CurrentToken.TokenType == TokenType.Separator)
                    {
                        CurrentToken = _lexer.GetNextToken();
                    }
                }

                CurrentToken = _lexer.GetNextToken();
            }

            return(ast);
        }
Esempio n. 2
0
        public override object Convert(object value)
        {
            if (value == null)
            {
                return(value);
            }
            string input = value.ToString();

            Tracer.TraceInformation("adddays {0}", AddDays);
            DateTime dateValue;

            if (DateTime.TryParse(input, out dateValue))
            {
                if (!AddSeconds.Equals(0))
                {
                    dateValue = dateValue.AddSeconds(this.AddSeconds);
                    Tracer.TraceInformation("date-after-addseconds {0}", dateValue);
                }
                if (!AddMinutes.Equals(0))
                {
                    dateValue = dateValue.AddMinutes(this.AddMinutes);
                    Tracer.TraceInformation("date-after-addminutes {0}", dateValue);
                }
                if (!AddHours.Equals(0))
                {
                    dateValue = dateValue.AddHours(this.AddHours);
                    Tracer.TraceInformation("date-after-addhours {0}", dateValue);
                }
                if (!AddDays.Equals(0))
                {
                    dateValue = dateValue.AddDays(this.AddDays);
                    Tracer.TraceInformation("date-after-adddays {0}", dateValue);
                }
                if (!AddMonths.Equals(0))
                {
                    dateValue = dateValue.AddMonths(this.AddMonths);
                    Tracer.TraceInformation("date-after-addmonths {0}", dateValue);
                }
                if (!AddYears.Equals(0))
                {
                    dateValue = dateValue.AddYears(this.AddYears);
                    Tracer.TraceInformation("date-after-addyears {0}", dateValue);
                }
                return(dateValue);
            }
            else
            {
                Tracer.TraceWarning("could-not-parse-to-date {0}", 1, input);
            }
            return(value);
        }