Ejemplo n.º 1
0
        private PqlPatternNode Pattern()
        {
            PqlToken   id      = currentToken;
            PqlSynonym synonym = new PqlSynonym(id);

            Eat(PqlTokenType.IDENT);
            Eat(PqlTokenType.LPAREN);
            PqlArgument varRef = Ref();

            Eat(PqlTokenType.COMMA);

            PqlExpr expr = null;

            if (currentToken.Type == PqlTokenType.STRING)
            {
                expr = Expr(true);
            }
            else if (currentToken.Type == PqlTokenType.FLOOR)
            {
                Eat(PqlTokenType.FLOOR);
                if (currentToken.Type == PqlTokenType.STRING)
                {
                    expr = Expr(false);
                    Eat(PqlTokenType.FLOOR);
                }
                else if (currentToken.Type == PqlTokenType.COMMA)
                {
                    Eat(PqlTokenType.COMMA);
                    Eat(PqlTokenType.FLOOR);
                }
            }
            Eat(PqlTokenType.RPAREN);
            return(new PqlPatternNode(synonym, varRef, expr));
        }
Ejemplo n.º 2
0
        private PqlExpr Expr(bool isExact)
        {
            PqlExpr retVal = new PqlExpr(isExact);
            string  expr   = currentToken.Value.ToString();
            Lexer   lexer  = new Lexer(expr);

            Eat(PqlTokenType.STRING);
            Parser.Parser parser = new Parser.Parser(lexer);
            retVal.ExprTree = parser.Expression();
            return(retVal);
        }