private void TryParseFilterFunctionCall(SparqlQueryParserContext context, IToken t, GraphPattern p)
        {
            //Gather the Terms of the Function Call
            Queue<IToken> funcTokens = new Queue<IToken>();
            funcTokens.Enqueue(t);

            int openBrackets = 0;
            IToken next = context.Tokens.Peek();
            do
            {
                if (next.TokenType == Token.LEFTBRACKET)
                {
                    openBrackets++;
                }
                else if (next.TokenType == Token.RIGHTBRACKET)
                {
                    openBrackets--;
                }

                funcTokens.Enqueue(next);
                context.Tokens.Dequeue();
                next = context.Tokens.Peek();

            } while (openBrackets > 0);

            UnaryExpressionFilter filter = new UnaryExpressionFilter(context.ExpressionParser.Parse(funcTokens));
            p.IsFiltered = true;
            p.AddFilter(filter);
        }
        private void TryParseFilterExists(SparqlQueryParserContext context, GraphPattern p, bool exists)
        {
            if (this._syntax == SparqlQuerySyntax.Sparql_1_0) throw new RdfParseException("EXISTS/NOT EXISTS is not supported in SPARQL 1.0");

            //EXISTS/NOT EXISTS generate a new Graph Pattern
            GraphPattern existsClause = this.TryParseGraphPattern(context);

            UnaryExpressionFilter filter = new UnaryExpressionFilter(new ExistsFunction(existsClause, exists));
            p.IsFiltered = true;
            p.AddFilter(filter);
        }
        private void TryParseFilterBuiltInCall(SparqlQueryParserContext context, IToken t, GraphPattern p)
        {
            ISparqlFilter filter;
            IToken next = context.Tokens.Dequeue();

            //Should get a LeftBracket next
            if (next.TokenType != Token.LEFTBRACKET)
            {
                throw ParserHelper.Error("Unexpected Token '" + next.GetType().ToString() + "' encountered while trying to parse a Built-in Function call", next);
            }

            //Gather tokens for the FILTER expression
            Queue<IToken> subtokens = new Queue<IToken>();
            subtokens.Enqueue(t);
            subtokens.Enqueue(next);
            int openBrackets = 1;
            while (openBrackets > 0)
            {
                next = context.Tokens.Dequeue();
                if (next.TokenType == Token.LEFTBRACKET)
                {
                    openBrackets++;
                }
                else if (next.TokenType == Token.RIGHTBRACKET)
                {
                    openBrackets--;
                }

                subtokens.Enqueue(next);
            }

            ISparqlExpression expr = context.ExpressionParser.Parse(subtokens);
            if (expr is BoundFunction)
            {
                filter = new BoundFilter((VariableExpressionTerm)expr.Arguments.First());
            }
            else
            {
                filter = new UnaryExpressionFilter(expr);
            }

            p.IsFiltered = true;
            p.AddFilter(filter);
        }
        private void TryParseFilterRegex(SparqlQueryParserContext context, IToken t, GraphPattern p)
        {
            //Gather all the Tokens that make up the Regex
            IToken next = context.Tokens.Peek();
            Queue<IToken> regexTokens = new Queue<IToken>();
            regexTokens.Enqueue(t);

            int openBrackets = 0;
            do
            {
                if (next.TokenType == Token.LEFTBRACKET)
                {
                    openBrackets++;
                }
                else if (next.TokenType == Token.RIGHTBRACKET)
                {
                    openBrackets--;
                }

                regexTokens.Enqueue(next);
                context.Tokens.Dequeue();
                next = context.Tokens.Peek();

            } while (openBrackets > 0);

            UnaryExpressionFilter filter = new UnaryExpressionFilter(context.ExpressionParser.Parse(regexTokens));
            p.IsFiltered = true;
            p.AddFilter(filter);
        }
 private void TryParseFilterExpression(SparqlQueryParserContext context, GraphPattern p)
 {
     UnaryExpressionFilter filter = new UnaryExpressionFilter(this.TryParseExpression(context, false));
     p.IsFiltered = true;
     p.AddFilter(filter);
 }