Example #1
0
        private ConditionExpression ParseLiteralExpression()
        {
            if (_tokenizer.IsToken(ConditionTokenType.LeftParen))
            {
                _tokenizer.GetNextToken();
                ConditionExpression e = ParseExpression();
                _tokenizer.Expect(ConditionTokenType.RightParen);
                return(e);
            }

            if (_tokenizer.IsToken(ConditionTokenType.Minus))
            {
                _tokenizer.GetNextToken();
                if (!_tokenizer.IsNumber())
                {
                    throw new ConditionParseException($"Number expected, got {_tokenizer.TokenType}");
                }

                return(ParseNumber(true));
            }

            if (_tokenizer.IsNumber())
            {
                return(ParseNumber(false));
            }

            if (_tokenizer.TokenType == ConditionTokenType.String)
            {
                var simpleLayout = new SimpleLayout(_tokenizer.StringTokenValue, _configurationItemFactory);
                _tokenizer.GetNextToken();
                if (simpleLayout.IsFixedText)
                {
                    return(new ConditionLiteralExpression(simpleLayout.FixedText, simpleLayout.ToString()));
                }
                else
                {
                    return(new ConditionLayoutExpression(simpleLayout));
                }
            }

            if (_tokenizer.TokenType == ConditionTokenType.Keyword)
            {
                string keyword = _tokenizer.EatKeyword();

                if (TryPlainKeywordToExpression(keyword, out var expression))
                {
                    return(expression);
                }

                if (_tokenizer.TokenType == ConditionTokenType.LeftParen)
                {
                    _tokenizer.GetNextToken();

                    ConditionMethodExpression predicateExpression = ParsePredicate(keyword);
                    return(predicateExpression);
                }
            }

            throw new ConditionParseException("Unexpected token: " + _tokenizer.TokenValue);
        }
Example #2
0
        private ConditionExpression ParseLiteralExpression()
        {
            if (_tokenizer.IsToken(ConditionTokenType.LeftParen))
            {
                _tokenizer.GetNextToken();
                ConditionExpression e = ParseExpression();
                _tokenizer.Expect(ConditionTokenType.RightParen);
                return(e);
            }

            if (_tokenizer.IsToken(ConditionTokenType.Minus))
            {
                _tokenizer.GetNextToken();
                if (!_tokenizer.IsNumber())
                {
                    throw new ConditionParseException($"Number expected, got {_tokenizer.TokenType}");
                }

                string numberString = _tokenizer.TokenValue;
                _tokenizer.GetNextToken();
                if (numberString.IndexOf('.') >= 0)
                {
                    return(new ConditionLiteralExpression(-double.Parse(numberString, CultureInfo.InvariantCulture)));
                }

                return(new ConditionLiteralExpression(-int.Parse(numberString, CultureInfo.InvariantCulture)));
            }

            if (_tokenizer.IsNumber())
            {
                string numberString = _tokenizer.TokenValue;
                _tokenizer.GetNextToken();
                if (numberString.IndexOf('.') >= 0)
                {
                    return(new ConditionLiteralExpression(double.Parse(numberString, CultureInfo.InvariantCulture)));
                }

                return(new ConditionLiteralExpression(int.Parse(numberString, CultureInfo.InvariantCulture)));
            }

            if (_tokenizer.TokenType == ConditionTokenType.String)
            {
                ConditionExpression e = new ConditionLayoutExpression(Layout.FromString(_tokenizer.StringTokenValue, _configurationItemFactory));
                _tokenizer.GetNextToken();
                return(e);
            }

            if (_tokenizer.TokenType == ConditionTokenType.Keyword)
            {
                string keyword = _tokenizer.EatKeyword();

                if (0 == string.Compare(keyword, "level", StringComparison.OrdinalIgnoreCase))
                {
                    return(new ConditionLevelExpression());
                }

                if (0 == string.Compare(keyword, "logger", StringComparison.OrdinalIgnoreCase))
                {
                    return(new ConditionLoggerNameExpression());
                }

                if (0 == string.Compare(keyword, "message", StringComparison.OrdinalIgnoreCase))
                {
                    return(new ConditionMessageExpression());
                }

                if (0 == string.Compare(keyword, "loglevel", StringComparison.OrdinalIgnoreCase))
                {
                    _tokenizer.Expect(ConditionTokenType.Dot);
                    return(new ConditionLiteralExpression(LogLevel.FromString(_tokenizer.EatKeyword())));
                }

                if (0 == string.Compare(keyword, "true", StringComparison.OrdinalIgnoreCase))
                {
                    return(new ConditionLiteralExpression(true));
                }

                if (0 == string.Compare(keyword, "false", StringComparison.OrdinalIgnoreCase))
                {
                    return(new ConditionLiteralExpression(false));
                }

                if (0 == string.Compare(keyword, "null", StringComparison.OrdinalIgnoreCase))
                {
                    return(new ConditionLiteralExpression(null));
                }

                if (_tokenizer.TokenType == ConditionTokenType.LeftParen)
                {
                    _tokenizer.GetNextToken();

                    ConditionMethodExpression predicateExpression = ParsePredicate(keyword);
                    return(predicateExpression);
                }
            }

            throw new ConditionParseException("Unexpected token: " + _tokenizer.TokenValue);
        }
Example #3
0
        private ConditionExpression ParseLiteralExpression()
        {
            if (tokenizer.IsToken(ConditionTokenType.LeftParen))
            {
                tokenizer.GetNextToken();
                ConditionExpression e = ParseExpression();
                tokenizer.Expect(ConditionTokenType.RightParen);
                return(e);
            }
            ;

            if (tokenizer.IsNumber())
            {
                string numberString = (string)tokenizer.TokenValue;
                tokenizer.GetNextToken();
                if (numberString.IndexOf('.') >= 0)
                {
                    return(new ConditionLiteralExpression(Double.Parse(numberString, CultureInfo.InvariantCulture)));
                }
                else
                {
                    return(new ConditionLiteralExpression(Int32.Parse(numberString, CultureInfo.InvariantCulture)));
                }
            }

            if (tokenizer.TokenType == ConditionTokenType.String)
            {
                ConditionExpression e = new ConditionLayoutExpression(tokenizer.StringTokenValue);
                tokenizer.GetNextToken();
                return(e);
            }

            if (tokenizer.TokenType == ConditionTokenType.Keyword)
            {
                string keyword = tokenizer.EatKeyword();

                if (0 == String.Compare(keyword, "level", true))
                {
                    return(new ConditionLevelExpression());
                }

                if (0 == String.Compare(keyword, "logger", true))
                {
                    return(new ConditionLoggerNameExpression());
                }

                if (0 == String.Compare(keyword, "message", true))
                {
                    return(new ConditionMessageExpression());
                }

                if (0 == String.Compare(keyword, "loglevel", true))
                {
                    tokenizer.Expect(ConditionTokenType.Dot);
                    return(new ConditionLiteralExpression(LogLevel.FromString(tokenizer.EatKeyword())));
                }

                if (0 == String.Compare(keyword, "true", true))
                {
                    return(new ConditionLiteralExpression(true));
                }

                if (0 == String.Compare(keyword, "false", true))
                {
                    return(new ConditionLiteralExpression(false));
                }

                if (tokenizer.TokenType == ConditionTokenType.LeftParen)
                {
                    tokenizer.GetNextToken();

                    ConditionMethodExpression predicateExpression = ParsePredicate(keyword);
                    return(predicateExpression);
                }
            }

            throw new ConditionParseException("Unexpected token: " + tokenizer.TokenValue);
        }