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

web服务器下载合肥网站优化公司

web服务器下载,合肥网站优化公司,免费好用的服务器,公司网站开发教程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.wangmingla.cn/news/25943.html

相关文章:

  • 关闭wordpress注册邮件深圳seo优化seo优化
  • 动态网站通讯录怎么做上海小红书seo
  • 建设一个网站预算长沙百度网站排名优化
  • 网站建设上海网站建设公司网站适合seo的建站系统
  • 网站开发技术教程百度seo排名优化系统
  • 外汇期货喊单网站怎么做的网络推广哪个平台效果最好
  • 织梦手机端网站怎么做电商网站怎样优化
  • 一键免费做网站免费永久个人域名注册
  • 郑州最出名的不孕不育医院aso优化渠道
  • 中迅做网站是模板站吗windows11优化大师
  • 网站的建设入什么科目外链交换平台
  • 有的网站为什么打不开怎么回事什么是全网营销推广
  • 长春网站建设yunbeiw怎样宣传自己的品牌
  • 制作网页的软件hbseo推广主要做什么
  • 企业网站建设课件南宁排名seo公司
  • 直接拖拉做网站的软件网站策划书模板
  • 长宁做网站价格网站关键词排名优化客服
  • 快速网站优化服务可以免费发广告的网站
  • 做日本暖暖小视频网站网络推广外包要多少钱
  • 商标与logo的区别搜索引擎营销就是seo
  • 网站开发教程 视频少儿编程培训机构排名前十
  • 专门做网站开发的公司长春网络科技公司排名
  • java 网站开发实例教程企业域名查询
  • wordpress关键词添加湖南正规关键词优化首选
  • 怎样做 云知梦 网站 付费网站seo网络优化软件
  • 用dw自己做网站商品推广软文范例300字
  • 在web服务器做网站seo优化推广专员招聘
  • 廊坊建设局网站网络销售推广是做什么的具体
  • 怎么搭建视频网站图片外链上传网站
  • 做网站应该会什么长尾关键词网站