Example #1
0
        INode ParseSymbol()
        {
            if (CurrToken == Token.ReservedWord)
            {
                var name = CurrSpan.AsString(_source);
                Next();

                switch (name)
                {
                case "$filter": return(new SymbolNode(Symbol.Filter));

                case "$select": return(new SymbolNode(Symbol.Select));

                case "$top": return(new SymbolNode(Symbol.Top));

                case "$skip": return(new SymbolNode(Symbol.Skip));

                case "$orderby": return(new SymbolNode(Symbol.OrderBy));

                case "$count": return(new SymbolNode(Symbol.Count));

                default: throw new InvalidOperationException("Unhandled symbol encountered");
                }
            }

            return(null);
        }
Example #2
0
        INode ParseBinary(INode leftNode)
        {
            if (CurrToken == Token.Space && NextToken == Token.Word)
            {
                var op           = GetOperator(NextSpan.AsString(_source));
                var opPrecedence = GetPrecedence(op);

                if (CurrGreed >= opPrecedence)
                {
                    Skip(Token.Space);
                    Skip(Token.Word);
                    Skip(Token.Space);

                    _stGreed.Push(opPrecedence);

                    var rightNode = ParseNode();

                    _stGreed.Pop();

                    return(new BinaryOperatorNode(op, leftNode, rightNode));
                }
            }

            return(null);
        }