Constructive tool design for formal languages by