na stosie odkładane są obliczone wyniki dla każdego z węzłów reprezentującego operacje matematyczną.
Poniżej zamieszczono przykładowy kod w C++ obrazujący działanie opisanych wizytatorów:
struct Node { Node *Left, *Right;
virtual void Accept( Visitor *v ) = 0;
struct ArgumentNode : public Node { double Argument;
virtual void Accept( Visitor *v )
v->VisitArgumentNode( this );
struct OperatorNode : public Node { char Operator;
virtual void Accept( Visitor *v )
if ( Left != NULL ) Left->Accept( v ); if ( Right != NULL ) Right->Accept( v );
v->VisitOperatorNode( this );
struct Visitor { virtual void VisitArgumentNode( ArgumentNode *n ) = 0; virtual void VisitOperatorNode( OperatorNode *n ) = 0;
struct PostfixPrintVisitor : public Visitor { String Output;
virtual void VisitArgumentNode( ArgumentNode *n )
Output += ToString( n->Argument );
virtual void VisitOperatorNode( OperatorNode *n )
Output += n->Operator;
struct CalculationVisitor : public Visitor { stack<Numeric> NumericStack;
virtual void VisitArgumentNode( ArgumentNode *n )
NumericStack.push( n->Argument );
virtual void VisitOperatorNode( OperatorNode *n )
Numeric b = NumericStack.top(); NumericStack.pop();
Numeric a = NumericStack.top(); NumericStack.pop();
switch ( n->Operator )