  A range of methodologies and techniques are available to guide the design and
implementation of language extensions and domain-specific languages. A simple
yet powerful technique is based on source-to-source transformations interleaved
across the compilation passes of a base language. Despite being a successful
approach, it has the main drawback that the input source code is lost in the
process. When considering the whole workflow of program development (warning
and error reporting, debugging, or even program analysis), program translations
are no more powerful than a glorified macro language. In this paper, we propose
an augmented approach to language extensions for Prolog, where symbolic
annotations are included in the target program. These annotations allow
selectively reversing the translated code. We illustrate the approach by
showing that coupling it with minimal extensions to a generic Prolog debugger
allows us to provide users with a familiar, source-level view during the
debugging of programs which use a variety of language extensions, such as
functional notation, DCGs, or CLP{Q,R}.
