copied from Christophe Reutenauer home page