Finite-Tree Analysis for Constraint Logic-Based Languages