집 >백엔드 개발 >C#.Net 튜토리얼 >C++ 디자인 패턴과 인터프리터 패턴에 대한 간략한 소개
통역사 패턴(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)를 참고해주세요!