private VariableType term() {
		TokenType[] op = new TokenType[]{
				TokenType.SSTAR, TokenType.SDIVD, TokenType.SMOD, TokenType.SAND};
		VariableType ltype, rtype = VariableType.VOID;
		
		ltype = factor();
		
		while(testToken(op)) {
			if(whenToken(new TokenType[]{TokenType.SSTAR, TokenType.SDIVD, TokenType.SMOD})) {
				int linum = getLineNumber();
				rtype = factor();
				if(ltype != VariableType.INTEGER || rtype != VariableType.INTEGER)
					throw new RuntimeException("Line\t\t\t\t" + linum + " : type mismatch" + "\n"
							+ "\t left : " + ltype + "\n"
							+ "\t right : " + rtype + "\n"
							+ "\t expected : " + VariableType.INTEGER);
			} else if(whenToken(TokenType.SAND)) {
				int linum = getLineNumber();
				rtype = factor();
				if(ltype != VariableType.BOOLEAN || rtype != VariableType.BOOLEAN)
					throw new RuntimeException("Line\t\t\t\t" + linum + " : type mismatch" + "\n"
							+ "\t left : " + ltype + "\n"
							+ "\t right : " + rtype + "\n"
							+ "\t expected : " + VariableType.BOOLEAN);
			} else {
				int linum = getLineNumber();
				throw new RuntimeException("Line\t\t\t\t" + linum + " : unknown error");
			}
		}
		return ltype;
	}