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); }
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); }
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); }