示例#1
0
        Serialisable Term()
        {
            if (lxr.tok == Sym.MINUS || lxr.tok == Sym.PLUS || lxr.tok == Sym.NOT)
            {
                var op = SExpression.Op.Plus;
                switch (lxr.tok)
                {
                case Sym.MINUS:
                    op = SExpression.Op.UMinus; break;

                case Sym.NOT:
                    op = SExpression.Op.Not; break;

                case Sym.PLUS:
                    Next();
                    return(Term());
                }
                Next();
                return(new SExpression(Term(), op, Serialisable.Null));
            }
            var a = Factor();

            while (lxr.tok == Sym.TIMES || lxr.tok == Sym.DIVIDE)
            {
                SExpression.Op op = SExpression.Op.And;
                switch (lxr.tok)
                {
                case Sym.TIMES: op = SExpression.Op.Times; break;

                case Sym.DIVIDE: op = SExpression.Op.Divide; break;
                }
                Next();
                a = new SExpression(a, op, Factor());
            }
            if (lxr.tok == Sym.IS)
            {
                Next();
                Mustbe(Sym.NULL);
                return(new SExpression(a, SExpression.Op.Eql, Serialisable.Null));
            }
            if (lxr.tok == Sym.IN)
            {
                Next();
                return(new SInPredicate(a, Value()));
            }
            return(a);
        }
示例#2
0
        Serialisable OneVal()
        {
            Serialisable a = Term();

            while (lxr.tok == Sym.PLUS || lxr.tok == Sym.MINUS)
            {
                SExpression.Op op = SExpression.Op.Or;
                switch (lxr.tok)
                {
                case Sym.PLUS: op = SExpression.Op.Plus; break;

                case Sym.MINUS: op = SExpression.Op.Minus; break;
                }
                Next();
                a = new SExpression(a, op, Term());
            }
            return(a);
        }