This paper presents a model called object-oriented attribute grammar (OOAG) that can be used to construct a toolset for software maintenance. The kernel of OOAG consists of two inter-related parts: a model-view-shape (MVS) application framework and an AG++, an object-oriented extension to traditional AGs. By combining compositional and generative techniques seamlessly, OOAG preserves both advantages introduced by respective OO and AG models, such as rapid prototyping, reusability, extensibility, and incrementality. So far, a toolset prototype consisting of a number of programming and maintenance tools were implemented using OOAG on the Windows environment. The editors developed can be used to construct programs by specifying the associated flow information in explicit (visual) or implicit (textual) ways, while the (incremental) maintenance tools, such as DU/UD tools and a program slicer, can help analyze incomplete program fragments to locate and inform the user of useful information.