/* AbstractExpression类 * 声明一个抽象的解释操作,这个接口为抽象语法树中所有的节点所共享。 */ class AbstractExpression { public: void Interpret(Context *context) = 0; }; /* TerminalExpression(终结符表达式) * 实现与文法中的终结符相关联的解释操作。实现抽象表达式中所要求的接口, * 主要是一个interpret()方法。文法中每一个终结符都有一个具体终结表达式 * 与之想对应。 */ class TermianlExpression : public AbstractExpression { public: virtual void Interpret(Context *context) { printf("终端解释器\n"); } }; /* NonterminalExpression(非终结符表达式) * 为文法中的非终结符实现解释操作。 * 对文法中每一条规则R1、R2 …… Rn都需要一个具体的非终结符表达式类。 * 通过实现抽象表达式interpret()方法实现解释操作。解释操作以递归方式 * 调用上面所提到的代表R1、R2 …… Rn中各个符号的实例变量。 */ class NonterminalExpression : public AbstractExpression { public: virtual void Interpret( Context *context ) { printf("非终端解释器\n"); } }; /* Context类 * 包含解释器之外的一些全局信息 */ class Context { private: string input; string output; public: // input的get/set方法 // output的get/set方法 }; // 客户端代码 int main() { Context *context = new Context(); List list; list->add( new TerminalExpression() ); list->add( new NonterminalExpression() ); list->add( new TerminalExpression() ); list->add( new TerminalExpression() ); for( …… ) { exp->Interpret( context ); } }