protected Top GetTop() { Tokenizer.ExpectToken(Constants.Top); Top top; if (Tokenizer.IsNextToken(Constants.OpenBracket)) { using (Tokenizer.ExpectBrackets()) { var parser = new ExpressionParser(Tokenizer); var expression = parser.Execute(); if (expression == null) throw new SyntaxException("TOP clause requires an expression"); var brackets = new NestedExpression(null); brackets.Expression = expression; top = new Top(brackets); } } else { if (Tokenizer.Current.Type != TokenType.Numeric || Tokenizer.Current.Value.Contains(".")) throw new SyntaxException(String.Format("Expected integer but found: '{0}'", Tokenizer.Current.Value)); top = new Top(new StringExpression(Tokenizer.Current.Value, null)); ReadNextToken(); } if (Tokenizer.TokenEquals(Constants.Percent)) top.Percent = true; return top; }
private Expression GetNestedExpression( Expression parent ) { Expression result; using ( Tokenizer.ExpectBrackets() ) { result = ReadCriteriaList( parent ); if ( Tokenizer.IsNextToken( Constants.Comma ) ) { var list = new ExpressionList(); list.Identifiers.Add( result ); do { Tokenizer.ExpectToken( Constants.Comma ); result = ReadCriteriaList( parent ); list.Identifiers.Add( result ); } while ( Tokenizer.IsNextToken( Constants.Comma ) ); result = list; } } NestedExpression nestedExpression = new NestedExpression( parent ) { Expression = result }; result.Parent = nestedExpression; return nestedExpression; }