Higher order attribute grammars provide a convenient means for specifying uni-directional transformations, but they provide no direct support for bidirectional transformations. In this paper we show how rewrite rules (with non-linear right hand sides) that specify a forward/get transformation can be inverted to specify a partial backward/put transformation. These inverted rewrite rules can then be extended with additional rules based on characteristics of the source language grammar and forward transformations to create, under certain circumstances, a total backward transformation. Finally, these rules are used to generate attribute grammar specifications implementing both transformations. Categories and Subject Descriptors D.3.3 [Programming Languages]: Data Types and Structures, Recursion; F.3.2 [Logics and Meanings of Programs]: Semantics of Programming Languages- Algebraic approaches to semantics; I.1.1 [Symbolic and Algebraic Manipulation]: Expressions and Their Representation.