>  기사  >  백엔드 개발  >  C++ 디자인 패턴과 인터프리터 패턴에 대한 간략한 소개

C++ 디자인 패턴과 인터프리터 패턴에 대한 간략한 소개

黄舟
黄舟원래의
2017-01-17 13:25:381296검색

통역사 패턴(Interpreter): 언어가 주어지면 문법 표현을 정의하고, 표현을 사용하여 언어의 문장을 해석하는 인터프리터를 정의합니다.

통역사 패턴으로 해결되는 문제: 특정 유형의 문제가 자주 발생하는 경우 해당 문제의 개별 인스턴스를 간단한 언어의 문장으로 공식화하는 것이 좋습니다. 이를 통해 이러한 문장을 해석하여 문제를 해결하는 인터프리터를 구축할 수 있습니다.

정규식은 그 응용 프로그램 중 하나입니다. 인터프리터는 정규식의 문법을 정의하고 특정 정규식을 나타내며 이 정규식을 해석하는 방법을 설명합니다.

네 가지 역할:

AbstractExpression: 추상 해석 작업을 선언합니다. 이 인터페이스는 추상 구문 트리의 모든 노드에서 공유됩니다.

TerminalExpression: 문법의 터미널 기호와 관련된 해석 작업을 구현합니다.

NonterminalExpression: 문법의 비단말 기호에 대한 해석 작업을 구현하는 비단말 표현입니다. 문법의 각 규칙 R1, R2...Rn에는 특정 비터미널 표현식 클래스가 필요합니다.

컨텍스트: 인터프리터 외부의 일부 전역 정보를 포함합니다.

모드 구현:

[code]//Context
class Context{
private:
    std::string input;
public:
    std::string Input(std::string in){
        input = in;
        return input;
    }
};

//抽象表达式
class AbstractExpression{
public:
    virtual void Interpret(Context *context) = 0;
};

//终结符表达式
class TerminalExpression: public AbstractExpression{
public:
    void Interpret(Context *context)override{
        std::cout << "TerminalExpression\n";
    }
};

//非终结符表达式
class NonterminalExpression: public AbstractExpression{
public:
    void Interpret(Context *context)override{
        std::cout << "NonterminalExpression\n";
    }
};

클라이언트:

[code]//Client
int main(){
    Context *context = new Context;
    std::list<AbstractExpression*> list;
    list.push_back(new TerminalExpression);
    list.push_back(new NonterminalExpression);
    list.push_back(new TerminalExpression);
    list.push_back(new TerminalExpression);

    for(auto i : list)
        i->Interpret(context);
    // Output:
    // TerminalExpression
    // NonterminalExpression
    // TerminalExpression
    // TerminalExpression

    return 0;
}

통역 모드 장점:

보통 해석하고 실행해야 하는 언어가 있고, 언어는 의 문장이 추상 구문 트리로 표현될 때 인터프리터 모드를 사용할 수 있습니다.

위 내용은 C++ 디자인 패턴 인터프리터 모드에 대한 간략한 소개 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.