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); }
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); }
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); }