解释器模式:
给定一个语言,定义了它的文法的一种表示,并定义了一个解释器,这个解释器使用该表示来解释语言中的句子。 Given a language, define a representation for its grammar along with an interpreter that uses the representation to interpret sentences in the language.UML图:
主要包括:
- AbstractExpression:声明了一个运行操作的接口。
- TerminalExpression:终结符表达式。实现与文法中终结符相关联的操作。
- NonterminalExpression:非终结符表达式,为文法中非终结符实现解释操作。
对文法中的每一条规则R1,R2,R3…..都须要一个详细的非终结符表达式类。
- Context:包括解释器外的一些全局信息。
- Client:定义了一个抽象的语法树,这棵语法树用来表示语言中特定的句子。语法树由NonterminalExpression和TerminalExpression构成。
C++实现:
#include#include using namespace std;class Context{};class AbstractExpression{ public: virtual void interpret(Context * c)=0;};class TerminalExpression:public AbstractExpression{ public: void interpret(Context *c) { cout<<"TerminalExpression interpret"<
lists; Context *c=new Context; AbstractExpression * te1=new TerminalExpression(); lists.push_back(te1); AbstractExpression * te2=new TerminalExpression(); lists.push_back(te2); AbstractExpression * te3=new TerminalExpression(); lists.push_back(te3); AbstractExpression * te4=new TerminalExpression(); lists.push_back(te4); AbstractExpression * nte1=new NonTerminalExpression(); lists.push_back(nte1); list ::iterator iter=lists.begin(); for(;iter!=lists.end();iter++) { (*iter)->interpret(c); } delete c; delete te1; delete te2; delete te3; delete te4; delete nte1; return 0;}
运行输出: