博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之二十三:解释器模式
阅读量:7009 次
发布时间:2019-06-28

本文共 1582 字,大约阅读时间需要 5 分钟。

解释器模式:

给定一个语言,定义了它的文法的一种表示,并定义了一个解释器,这个解释器使用该表示来解释语言中的句子。
Given a language, define a representation for its grammar along with an interpreter that uses the representation to interpret sentences in the language.

UML图:

这里写图片描写叙述

主要包括:

  1. AbstractExpression:声明了一个运行操作的接口。
  2. TerminalExpression:终结符表达式。实现与文法中终结符相关联的操作。
  3. NonterminalExpression:非终结符表达式,为文法中非终结符实现解释操作。

    对文法中的每一条规则R1,R2,R3…..都须要一个详细的非终结符表达式类。

  4. Context:包括解释器外的一些全局信息。

  5. 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;}

运行输出:

这里写图片描写叙述

你可能感兴趣的文章
CentOS 7 YUM 安装 LNMP 环境
查看>>
(转载)图片左右滚动控件(带倒影)——重写Gallery
查看>>
Linux下安装erlang及rabbitmq
查看>>
xUnit.Net使用备忘录(1):安装与使用测试
查看>>
(原)centos7安装和使用greenplum4.3.12(详细版)
查看>>
深入学习Heritrix---解析CrawlController(转)
查看>>
HDU 6055 Regular polygon
查看>>
visio2013密钥
查看>>
poj1061(扩展欧基里德定理)
查看>>
阻塞队列
查看>>
c++虚析构函数的使用及其注意点
查看>>
Hive之 hive与hadoop的联系
查看>>
乐游 游戏论坛开发第二阶段
查看>>
Python3学习笔记-元组(tuple)
查看>>
linux和mac
查看>>
go 中的面向对象实现
查看>>
js 自定义弹窗方法
查看>>
Eclipse快捷键大全(转载)
查看>>
Install CentOS 7 on Thinkpad t430
查看>>
JavaScript中Date的一些细节
查看>>