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

免费做相册视频网站营销顾问

免费做相册视频网站,营销顾问,遵义网站建设哪家好,个人介绍网页制作html目录 解释器模式(Interpreter Pattern) 实际应用 算术表达式解释器 布尔表达式解释器 总结 解释器模式(Interpreter Pattern) 解释器模式是一种行为设计模式,它定义了一种语言的文法表示,并使用解释器…

目录

解释器模式(Interpreter Pattern)

实际应用

算术表达式解释器

布尔表达式解释器

总结


解释器模式(Interpreter Pattern)

解释器模式是一种行为设计模式,它定义了一种语言的文法表示,并使用解释器来解释这些文法。该模式适用于那些有特定语法规则的场景,比如编译器、正则表达式引擎和计算器。

实际应用

算术表达式解释器

算术表达式解释器 -- 可以解析和计算包含加法和减法的算术表达式。

#include <iostream>
#include <string>
#include <stack>
#include <memory>
#include <unordered_map>// 抽象表达式
class Expression {
public:virtual ~Expression() = default;virtual int interpret(const std::unordered_map<char, int>& context) = 0;
};// 终结符表达式(变量)
class VariableExpression : public Expression {
private:char name;
public:VariableExpression(char name) : name(name) {}int interpret(const std::unordered_map<char, int>& context) override {return context.at(name);}
};// 非终结符表达式(加法)
class AddExpression : public Expression {
private:std::shared_ptr<Expression> left, right;
public:AddExpression(std::shared_ptr<Expression> left, std::shared_ptr<Expression> right) : left(left), right(right) {}int interpret(const std::unordered_map<char, int>& context) override {return left->interpret(context) + right->interpret(context);}
};// 非终结符表达式(减法)
class SubtractExpression : public Expression {
private:std::shared_ptr<Expression> left, right;
public:SubtractExpression(std::shared_ptr<Expression> left, std::shared_ptr<Expression> right) : left(left), right(right) {}int interpret(const std::unordered_map<char, int>& context) override {return left->interpret(context) - right->interpret(context);}
};// 客户端代码:解析并计算表达式
int main() {std::string expr = "a+b-c";std::unordered_map<char, int> context = {{'a', 5}, {'b', 3}, {'c', 2}};std::stack<std::shared_ptr<Expression>> stack;for (char token : expr) {if (isalpha(token)) {stack.push(std::make_shared<VariableExpression>(token));} else if (token == '+') {auto right = stack.top(); stack.pop();auto left = stack.top(); stack.pop();stack.push(std::make_shared<AddExpression>(left, right));} else if (token == '-') {auto right = stack.top(); stack.pop();auto left = stack.top(); stack.pop();stack.push(std::make_shared<SubtractExpression>(left, right));}}auto expression = stack.top();int result = expression->interpret(context);std::cout << "Result: " << result << std::endl;return 0;
}

布尔表达式解释器

布尔表达式解释器 -- 可以解析和计算包含与(AND)和或(OR)的布尔表达式。

#include <iostream>
#include <string>
#include <stack>
#include <memory>
#include <unordered_map>// 抽象表达式
class Expression {
public:virtual ~Expression() = default;virtual bool interpret(const std::unordered_map<std::string, bool>& context) = 0;
};// 终结符表达式(变量)
class VariableExpression : public Expression {
private:std::string name;
public:VariableExpression(const std::string& name) : name(name) {}bool interpret(const std::unordered_map<std::string, bool>& context) override {return context.at(name);}
};// 非终结符表达式(与操作)
class AndExpression : public Expression {
private:std::shared_ptr<Expression> left, right;
public:AndExpression(std::shared_ptr<Expression> left, std::shared_ptr<Expression> right) : left(left), right(right) {}bool interpret(const std::unordered_map<std::string, bool>& context) override {return left->interpret(context) && right->interpret(context);}
};// 非终结符表达式(或操作)
class OrExpression : public Expression {
private:std::shared_ptr<Expression> left, right;
public:OrExpression(std::shared_ptr<Expression> left, std::shared_ptr<Expression> right) : left(left), right(right) {}bool interpret(const std::unordered_map<std::string, bool>& context) override {return left->interpret(context) || right->interpret(context);}
};// 客户端代码:解析并计算布尔表达式
int main() {std::string expr = "a AND b OR c";std::unordered_map<std::string, bool> context = {{"a", true}, {"b", false}, {"c", true}};std::stack<std::shared_ptr<Expression>> stack;std::istringstream iss(expr);std::string token;while (iss >> token) {if (token == "a" || token == "b" || token == "c") {stack.push(std::make_shared<VariableExpression>(token));} else if (token == "AND") {auto right = stack.top(); stack.pop();auto left = stack.top(); stack.pop();stack.push(std::make_shared<AndExpression>(left, right));} else if (token == "OR") {auto right = stack.top(); stack.pop();auto left = stack.top(); stack.pop();stack.push(std::make_shared<OrExpression>(left, right));}}auto expression = stack.top();bool result = expression->interpret(context);std::cout << "Result: " << std::boolalpha << result << std::endl;return 0;
}

总结

解释器模式可以帮助我们定义和解释特定语言的语法规则,并将这些规则应用于不同的上下文。

http://www.khdw.cn/news/17404.html

相关文章:

  • 济南网站建设正规公司哪家好网络营销策划书步骤
  • 较好的网站建设公司星力游戏源码
  • 网站建设结论保定网站建设方案优化
  • 服务器可以做网站销售培训课程一般有哪些
  • 网站建设目的及功能定位整站seo技术搜索引擎优化
  • 合肥市城乡建设委员会网站做竞价推广这个工作怎么样
  • 我是做网站的 哪里有单接企业网站建设的作用
  • 专业做网站公司排名成都seo排名
  • wordpress 搜索框插件公司seo
  • 网站建设军成可以免费打广告的网站
  • 网站中的文字滑动怎么做网站一般怎么推广
  • 网站营销方案设计公司网页开发流程
  • 奢侈品 网站建设方案自建站模板
  • com域名注册1元seo推广学院
  • 前端是什么商丘seo排名
  • 深圳制作网站流程沈阳关键词优化价格
  • 家具网站策划书深圳网站建设哪家好
  • 网站三大标签设置培训心得体会怎么写
  • 无锡有网页制作公司吗windows优化大师卸载不掉
  • 深圳做企业网站多少钱百度点击率排名有效果吗
  • 呼和浩特市建设委员会官方网站360优化大师官方下载
  • wordpress幻灯片不显示东莞关键词seo
  • 网站开发详细流程图长沙seo网站优化公司
  • 有没有一种网站做拍卖厂的百度代理公司
  • 做网站实训心得网络营销的几种模式
  • 网络seo是什么工作关键词优化的策略
  • an网站建设百度搜索引擎首页
  • wordpress站点实例seo推广一年要多少钱
  • 北京网站建设备案哪些行业适合做网络推广
  • 国外网站加速器免费网站安全软件大全游戏