当前位置: 首页 > news >正文

html css js手机 移动 网站 分享连接 一键分享品牌广告文案

html css js手机 移动 网站 分享连接 一键分享,品牌广告文案,怎么下载Wordpress,去哪里找做网站1.定义 给定一个语言,定义它的文法的一种表示,并定义一个解释器。比如加减乘除在代码里是一种表示,我们需要翻译成可以阅读的数学公式,并且可以供用户输入数字得到输出结果。 2.组成结构 抽象表达式(Abstract Expres…

1.定义

        给定一个语言,定义它的文法的一种表示,并定义一个解释器。比如加减乘除在代码里是一种表示,我们需要翻译成可以阅读的数学公式,并且可以供用户输入数字得到输出结果。

2.组成结构

  1. 抽象表达式(Abstract Expression):定义解释器的接口,约定解释器的解释操作,主要包含解释方法 interpret()。
  2. 终结符表达式(Terminal Expression):是抽象表达式的子类,用来实现文法中与终结符相关的操作,文法中的每一个终结符都有一个具体终结表达式与之相对应。
  3. 非终结符表达式(Nonterminal Expression):也是抽象表达式的子类,用来实现文法中与非终结符相关的操作,文法中的每条规则都对应于一个非终结符表达式。
  4. 上下文(Context):通常包含各个解释器需要的数据或是公共的功能,一般用来传递被所有解释器共享的数据,后面的解释器可以从这里获取这些值。

我们将用示例代码来解释各个组成部分的意义。

3.示例代码

#include <iostream>
#include <map>using namespace std;#define DELETE(pointer) delete pointer; pointer=nullptr
const string key1 = string("s1");
const string key2 = string("s2");
const string key3 = string("s3");
const string key4 = string("s4");class Context
{
public:Context() {datas[key1] = 1;datas[key2] = 2;datas[key3] = 3;datas[key4] = 4;}int getValue(string key) {if (!datas.count(key)){return 0;}return datas[key];}private:std::map<string, int> datas;
};class Expression
{
public:Expression(Expression* left, Expression* right) :left(left), right(right) { }virtual ~Expression() {if (left != nullptr){DELETE(left);}if (right != nullptr){DELETE(right);}}virtual int interpreter(Context* context) = 0;protected:Expression* left;Expression* right;
};class MultiExpression : public Expression
{
public:MultiExpression(Expression* left, Expression* right) : Expression(left, right) { }int interpreter(Context* context) override {if ((left == nullptr) || (right == nullptr)){return 0;}return left->interpreter(context) * right->interpreter(context);}
};class DivisionExpression : public Expression
{
public:DivisionExpression(Expression* left, Expression* right) : Expression(left, right) { }int interpreter(Context* context) override {if ((left == nullptr) || (right == nullptr)){return 0;}return left->interpreter(context) / right->interpreter(context);}
};class TerminalExpression : public Expression
{
public:TerminalExpression(int value) : value(value), Expression(nullptr, nullptr) { }int interpreter(Context* context) {return value;}private:int value;
};void doInterpreter() // 客户端client
{/*   3*4/2==6  对应语法树如下:/   (除法)/ \*  2/ \3   4*/Context context;MultiExpression* multiExpression = new MultiExpression(new TerminalExpression(context.getValue(key3)), new TerminalExpression(context.getValue(key4))); // 终止节点作为叶子结点,非终止节点作为非叶子节点int mutil = multiExpression->interpreter(&context);cout << "mutil==" << mutil << endl;DivisionExpression* divisionExpression = new DivisionExpression(multiExpression, new TerminalExpression(context.getValue(key2))); // 乘法表达式作为左子树 / 右子树int division = divisionExpression->interpreter(&context); // 运行解释器cout << "division==" << division << endl;DELETE(divisionExpression);// 这里注意,不能第二次释放divisionExpression,因为此时它是divisionExpression的左子树//,divisionExpression释放的时候会自动释放左右子树,也就是递归释放,最终只需要释放最后一次嵌套调用的就行
}int main()
{doInterpreter();system("pause");return 1;
}

引用

C++设计模式——解释器模式(interpreter pattern)_c++interpreter模式-CSDN博客

 

 

http://www.15wanjia.com/news/6791.html

相关文章:

  • 智慧政务网站怎么做媒体发稿费用
  • 网站网页设计优秀案例阿里云官网首页
  • 做全景图二维码的网站网页制作步骤
  • wordpress连接WEB网页网站seo优化公司
  • 现在流行的网站开发制作工具站长工具权重
  • 网页游戏大全小游戏珠海关键词优化软件
  • 高埗镇仿做网站网络培训系统
  • 宝宝投票网站怎么做刷网站seo排名软件
  • 乌克兰设计网站建设seo排名官网
  • 微网站建设高端网站定制武汉seo结算
  • 天津建设工程竣工备案公示网站五年级上册语文优化设计答案
  • 做网站有哪些行业google谷歌搜索引擎入口
  • 做网站买域名怎么在百度上发布自己的信息
  • 携程旅游网站建设的定位搜索引擎优化哪些方面
  • 电商数据seo规范培训
  • 浚县网站建设免费发广告的网站大全
  • 外贸网站排名seo站长优化工具
  • 国外建站 网站 推荐淘宝关键词排名查询工具免费
  • 有没有什么网站做卷子2020做seo还有出路吗
  • 蜂网站开发iis7站长工具
  • 苏州推广网站建设概况seo门户网站建设方案
  • 那种漂亮的网站怎么做的网络营销推广方案论文
  • 为政府做网站的公司搜索风云排行榜
  • 免费创建虚拟网站网站提交入口链接
  • 集团做网站优势seo网站优化软件价格
  • 重庆哪家制作网站好哈尔滨最新疫情通报
  • 做新闻门户网站需要什么郑州网络推广专业公司
  • 网站编辑是做网页编辑吗新品牌推广策划方案
  • 越秀区建设水务局网站百度搜索关键词排名优化技术
  • 有什么做服装的网站吗搜索引擎营销的流程