Semantic actions may be attached to any point in the grammar specification.
They allow to call a function or function object in order to provide the
value output by the generator attached to the semantic action. Semantic
actions are associated with a generator using the syntax g[],
where g is an arbitrary
generator expression.

A (semantic action) function with signature void(Attrib&,Context&,bool&). The third parameter is a boolean
flag that can be set to false to force the generator to fail. Both
Context and the boolean
flag are optional. For more information see below.

Attrib

The attribute to be used to generate output from.

Context

The type of the generator execution context. For more information
see below.

The function or function object is expected to return the value to generate
output from by assigning it to the first parameter, attr.
Here Attrib is the attribute
type of the generator attached to the semantic action.

The type Context is the
type of the generator execution context. This type is unspecified and depends
on the context the generator is invoked in. The value context
is used by semantic actions written using Phoenix
to access various context dependent attributes and values. For more information
about Phoenix placeholder
expressions usable in semantic actions see Nonterminal.

The third parameter, pass,
can be used by the semantic action to force the associated generator to
fail. If pass is set to false
the action generator will immediately return false
as well, while not invoking g
and not generating any output.

The complexity of the action generator is defined by the complexity of
the generator the semantic action is attached to and the complexity of
the function or function object used as the semantic action.

Important

Please note that the use of semantic actions in Spirit.Karma
generally forces the library to create a copy of
the attribute, which might be a costly operation. Always consider using
other means of associating a value with a particular generator first.