An attribute grammar describes a computation over a recursive data
structure (syntax tree). The corresponding evaluator can be directly
encoded as a set of lazily evaluated functions. In this paper we show
how each function may be converted into a collection of strict
functions and a collection of new data types. We call this process,
that is based on the results of a global data flow analysis, {\em
strictification}. This transformation leads to efficient programs,
both in time and space, that are also much more suited for incremental
({\em i.e.}  memoized) and parallel evaluation.