private ConditionExpression ParseLiteralExpression() { if (tokenizer.IsToken(ConditionTokenType.LeftParen)) { tokenizer.GetNextToken(); var 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); } var 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()) { var 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) { var 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(); var predicateExpression = ParsePredicate(keyword); return predicateExpression; } } throw new ConditionParseException("Unexpected token: " + tokenizer.TokenValue); }
private ConditionExpression ParseLiteralExpression() { if (tokenizer.IsToken(ConditionTokenType.LeftParen)) { tokenizer.GetNextToken(); var 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); } var 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()) { var 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) { var 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(); var predicateExpression = ParsePredicate(keyword); return(predicateExpression); } } throw new ConditionParseException("Unexpected token: " + tokenizer.TokenValue); }