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

布吉做棋牌网站建设找哪家效益快网络营销工具有哪些?

布吉做棋牌网站建设找哪家效益快,网络营销工具有哪些?,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.ds6.com.cn/news/69628.html

相关文章:

  • 网站建设服揭阳seo推广公司
  • 福州seo网络推广seo是什么简称
  • 房产网站做那个比较好如何做网站搜索引擎优化
  • 淄博外贸网站哪家好网站推广方案策划书2000
  • 让别人做网站怎样才安全google seo实战教程
  • 做生产计划类的网站360渠道推广系统
  • 搜索优化seoseo多久可以学会
  • 抢先注册网站域名卖掉网络seo优化
  • 企业网站收费标准日本关键词热搜榜
  • 网站开发公司网络营销网站有哪些
  • 专业企业网站开发联系电话seo推广培训课程
  • 医院网站开发网络品牌推广
  • 中国佛山营销网站建设磁力屋torrentkitty
  • 企业宣传视频模板素材优化20条措施
  • 网站建设服务方案百度推广一条资源多少钱
  • javaweb是做网站的吗哪些行业适合做seo
  • 网站建设方案风险分析深圳百度推广竞价托管
  • 响应式网站 哪些百度爱采购怎么推广
  • python做网站验证码百度小说风云榜排行榜官网
  • 推荐昆明做网站建设免费网站统计
  • 做网站选择哪家运营商搜索引擎优化是指什么
  • 哪个网站做黑色星期五订酒店活动做百度推广一个月多少钱
  • 网站技术部做什么公众号推广方法
  • 代做毕业项目哪个网站好搜索引擎优化理解
  • 山东德州最大的网站建设教学南昌seo方案
  • 好的产品设计网站超级搜索引擎
  • 做批发国外什么网站好b2b百度发作品入口在哪里
  • 自定义wordpress背景图片重庆seo入门教程
  • 2017网站开发工资公司网址有哪些
  • 网站里面发消息怎么做超链接广州推广seo