Interpreter(解释器)设计模式

来源:互联网 发布:写作文网络词语 编辑:程序博客网 时间:2024/05/22 01:29

声明:本博文篇幅短,适合review。

一、概念

      给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

二、模式结构图

      

三、例子

class Context {public:string getInput(){return mInput;}void setInput(string input){mInput = input}string getOutput(){return mOutput;}void setOutput(string output){mOutput = output}private:string mInput;string mOutput;};class AbstractExpression{public:virtual void interpret(Context context) = 0;};class TerminalExpression : public AbstractExpression{public:void interpret(Context context){cout<<"TerminalExpression interpret"<<endl;}};class NonTerminalExpression : public AbstractExpression{public:void interpret(Context context){cout<<"NonTerminalExpression interpret"<<endl;}};void main(){Context * context = new Context();Vector<AbstractExpression *> vec;vec.push_back(new NonTerminalExpression());vec.push_back(new NonTerminalExpression());vec.push_back(new TerminalExpression());for(Vector<AbstractExpression *>::iterator it = vec.begin(); it != vec.end(); it++){(*it)->interpret(context);}}
应用如:正则表达式、浏览器解析html等

四、缺点

       1、优点

             a、每一条文法规则都可以表示为一个类,因此可以方便地实现一个简单的语言。

             b、易于改变和扩展文法。

       2、缺点

             a、对于复杂文法难以维护

1 0
原创粉丝点击