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

河南科技网站建设电子商务网站建设下载

河南科技网站建设,电子商务网站建设下载,千灯网站建设,做电影免费ppt模板下载网站目录 解释器模式(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.yayakq.cn/news/791621/

相关文章:

  • asp.net 微网站开发建站用Wordpress还是
  • 凯里网站建设公司食品网站建设项目的预算
  • 哈尔滨快速建站合作大连网站开发公司排名
  • 个人做外贸网站违法吗公司需要做网站
  • 湖北什么是网站建设wordpress段子
  • 模板设计建站免费建站系统软件
  • 做网站前端后端ui什么意思做网站外包哪家好
  • 学校如何建网站企业微信用途
  • 上海网站设计价昆明企业做网站
  • 照着别人网站做网站建设开题报告设计
  • 医院网站详细设计洛阳网站推广公司
  • 企业建设网站的资金策划网站关键词基础排名怎么做
  • 网站自动生成网页中国交通建设监理协会网站
  • 网站建设投资大概每年需要多少钱介绍自己做的网站的论文
  • 丹东网站建设网站突然打不开是什么原因
  • 怎么自己做淘宝客网站百度关键词优化外包
  • wordpress 多人编辑中国优化网
  • 工信部网站怎么查网址佛山顺德容桂网站制作
  • 北京做招聘网站的公司利用excel做填报网站
  • 购物网站开发需求文档做软文的网站
  • 宁波专业的网站建设团队简单几步为wordpress加上留言板
  • 如何进行医药网站建设七台河新闻联播视频
  • 合肥市建设通网站企业网页设计策划书
  • 求一个手机能看的网站营销推广策划
  • 怎样做免费的网站自由建网站的网络程序
  • 西宁网站建设君博正规可以在线做试卷的网站
  • 融资融券配资网站开发seo网络推广企业
  • 建设一个电影网站怎么做温州市建设局网站
  • 网站中英文切换代码建网站软件有哪些
  • 单页网站技术网站制作的基础