protected Expr ParseFactor(string s) { if (s[pos] == '(') { Consume(s, '('); Expr e = ParseExpr(s); Consume(s, ')'); return(e); } else if (s[pos] == '-') { Consume(s, '-'); Expr e = ParseFactor(s); return(nf.Negate(e)); } else if (s[pos] >= '0' && s[pos] <= '9') { return(ParseNumber(s)); } else { Error(s, pos); return(null); } }