Example #1
0
        public ExpNode parseExp()
        {
            OpExpNode exp  = null;
            ExpNode   fact = null;

            if (lex.Peek() == Token.SUB)
            {
                exp       = new OpExpNode();
                exp.left  = null;
                exp.OP    = lex.Take();
                exp.right = parseFact();
            }
            else
            {
                fact = parseFact();
            }
            while (lex.Peek() == Token.ADD || lex.Peek() == Token.SUB)
            {
                OpExpNode tmp = new OpExpNode();
                tmp.left  = exp == null ? fact : exp;
                tmp.OP    = lex.Take();
                tmp.right = parseFact();
                exp       = tmp;
            }
            return(exp == null ? fact : exp);
        }
Example #2
0
        private ExpNode parseExpnt()
        {
            ExpNode elm = parseElmnt();

            if (lex.Peek() != Token.POW)
            {
                return(elm);
            }
            OpExpNode exp = new OpExpNode();

            exp.left  = elm;
            exp.OP    = lex.Take();
            exp.right = parseExpnt();
            return(exp);
        }
Example #3
0
        private ExpNode parseFact()
        {
            ExpNode   expn = parseExpnt();
            OpExpNode exp  = null;

            while (lex.Peek() == Token.MUL || lex.Peek() == Token.DIV)
            {
                OpExpNode tmp = new OpExpNode();
                tmp.left  = exp == null ? expn : exp;
                tmp.OP    = lex.Take();
                tmp.right = parseExpnt();
                exp       = tmp;
            }
            return(exp == null ? expn : exp);
        }