Listing 1: A straightforward interpreter implementation for the grammar rule from the regular-expression language

class RegularExpression
{
public:
    virtual ~RegularExpression() {}
    virtual bool Interpret( const char *& ) const = 0;
};

class RepetitionExpression : public RegularExpression
{
    RegularExpression * repeat_;
public:
    RepititionExpression( RegularExpression * repeat )
        : repeat_( repeat ) {}
    virtual bool Interpret( const char *& sz ) const
    {
        while( repeat_->Interpret( sz ) )
            ;
        return true;
    }
};

class LiteralExpression : public RegularExpression
{
    char ch_;
public:
    LiteralExpression( char ch )
        : ch_( ch ) {}
    virtual bool Interpret( const char *& sz ) const
    {
        return ( *sz!==\o’&&*sz==ch_ ) ? ( ++sz,true ) : false;
    }
};
— End of Listing —