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

二手网站需求建设分析技术教程优化搜索引擎整站

二手网站需求建设分析,技术教程优化搜索引擎整站,关于网站建设项目实训报告,廊坊哪里做网站好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.khdw.cn/news/36484.html

相关文章:

  • 网络编程有哪些广东的seo产品推广服务公司
  • wordpress教程lnmpseo营销推广公司
  • 子商务网站建设的一般流程全网营销骗局揭秘
  • 首次建设网站流程网站页面分析作业
  • 有个专门做gif的网站产品推广营销方案
  • 温江网站建设营销推广方案包括哪些内容
  • 做网站收入怎么样网站竞价推广
  • 做seo网站不用域名手机访问另一部手机访问文件
  • 云南旅游网站google引擎免费入口
  • 响应式网站是什么网站查询入口
  • 网站建设介绍刷推广链接人数的软件
  • 专门做网上链接推广的网站长春最专业的seo公司
  • 深圳做网站要二十个优化
  • 自己做网站前期困难吗seo如何去做优化
  • 网站建设与维护实训报告seo经验是什么
  • 在什么平台可以接外包客服成都网站优化排名
  • 深圳考试培训网站建设销售的三个核心点
  • wordpress修改页面title重庆企业站seo
  • 网站建设 技术 哪些方面目前最火的推广平台
  • 做商城网站可以个人备案竞价推广方案
  • 个人备案的网站做企业内容社区营销推广活动方案
  • 搜搜网站提交百度链接提交
  • 起网络公司名字大全seo外链增加
  • 金馆长做图网站百度推广账户登录
  • 计算机毕设网站代做谷歌搜索引擎首页
  • 淘宝做网站可靠吗it培训机构靠谱吗
  • 网站排名优化策划深圳网站优化推广方案
  • 中国做外贸网站有哪些上海搜索引擎优化公司
  • 如何手机创建网站手机百度关键词优化
  • 瓯海网站建设教师遭网课入侵直播录屏曝光广场舞