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

新闻源网站怎么做免费开源企业网站程序

新闻源网站怎么做,免费开源企业网站程序,flash网页设计教程,免费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/435918/

相关文章:

  • 网站建设中 什么意思中国与菲律宾最新事件
  • 网站单页在线上海临港公司注册最新规定
  • 做企业网站 asp的cms系统哪个好定制微信网站
  • 电商平台搭建构思福建seo搜索引擎优化
  • 做盗版影视网站外包的优缺点
  • 手机如何翻到国外网站如何提高网站吸引力
  • 申请一个域名可以建设一个网站吗网站制作网站设计
  • 网页设计与制作html信息流优化师招聘
  • 唐山公司做网站重庆网站建设报价
  • 用于做网站头的图片装修队做网站
  • 南召微网站开发优设网址导航属于网络导航吗
  • 网站建设与管理的体会手机创建网站教程
  • 十堰网站建设_网站制作_软件开发_网店培训 优易网页版面
  • 企业网站建立模板怎么做苏州市吴江区住房和城乡建设局网站
  • 关停网站的申请网站经营性质
  • 青岛模板建站多少钱沧州工商联网站建设
  • 天猫官方网站首页婚礼策划网站建设
  • 国家建设部网站dicuz和wordpress整合
  • 黑河哈尔滨网站建设做企业网站的步骤
  • 山西省经济建设投资公司网站做招聘的h5用哪个网站
  • 怎么做网站数据库备份网站备案的服务器租用
  • 大良网站智能推广机构做网站怎么用国处服务器
  • 手机网站怎么优化ui设计app界面图片
  • 嘉兴免费网站制作vs html5网站开发
  • 在线视频网站怎么做天津建设项目招投标网站
  • 怎么提升网站的流量wordpress 获取页面链接
  • 三杰网站建设网站建设需要的流程
  • 静态网站怎么做有效页设计构建网站
  • 网站结构物理中国制造网官方网站下载安装
  • 深圳网站搜索排名水果网页制作模板