  When creating a new domain-specific language (DSL) it is common to embed it
as a part of a flexible host language, rather than creating it entirely from
scratch. The semantics of an embedded DSL (EDSL) is either given directly as a
set of functions (shallow embedding), or an AST is constructed that is later
processed (deep embedding). Typically, the deep embedding is used when the EDSL
specifies domain-specific optimizations (DSO) in a form of AST transformations.
  In this paper we show that deep embedding is not necessary to specify most
optimizations. We define language semantics as action functions that are
executed during parsing. These actions build incrementally a new, arbitrary
complex program function.
  The EDSL designer is able to specify many aspects of the semantics as a
runnable code, such as variable scoping rules, custom type checking, arbitrary
control flow structures, or DSO. A sufficiently powerful staging mechanism
helps assembling the code from different actions, as well as evaluate the
semantics in arbitrarily many stages. In the end, we obtain code that is as
efficient as one written by hand.
  We never create any object representation of the code. No external traversing
algorithm is used to process the code. All program fragments are functions with
their entire semantics embedded within the function bodies. This approach
allows reusing the code between EDSL and the host language, as well as
combining actions of many different EDSLs.
