int main(int argc,char* argv[]) { Context* c = new Context(); AbstractExpression* te = new TerminalExpression("hello"); AbstractExpression* nte = new NonterminalExpression(te,2); nte->Interpret(*c); delete nte; delete c; return 0; }
int main(int argc, char* argv[]) { //生成表达式 AbstractExpression* expression; //解析器对象 Context context; //两个变量 VariableExp* varX = new VariableExp("keyX"); VariableExp* varY = new VariableExp("keyY"); /*一个复杂表达式 或(与(常量,变量),与(变量,非(变量)))*/ expression = new OrExp( new AndExp(new ConstantExp(true), varX), new AndExp(varY, new NotExp(varX))); //在解析器中建立外部名字和值的关联 context.Assign(varX, false); context.Assign(varY, true); //递归运算表达式求值 bool result = expression->Interpret(context); cout<<"result: "<<result<<endl; printf("Hello World!\n"); return 0; }
///一些应用提供了内建(Build-In)的脚本或者宏语言来让用户可以定义他们能够在系统 中进行的操作。Interpreter 模式的目的就是使用一个解释器为用户提供一个一门定义语言的 语法表示的解释器,然后通过这个解释器来解释语言中的句子 ///Interpreter 模式中使用类来表示文法规则,因此可以很容易实现文法的扩展。另外对于 终结符我们可以使用 Flyweight 模式来实现终结符的共享。 void InterpreterTest() { Interpreter_Context* c = new Interpreter_Context(); AbstractExpression* te = new TerminalExpression("hello"); AbstractExpression* nte = new NonterminalExpression(te,2); nte->Interpret(*c); }