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

C++ 设计模式-解释器模式

数学表达式解释器

示例需求

  1. 支持数字、变量、加减乘除运算
  2. 支持函数调用(如 max(2,3)
  3. 能够处理嵌套表达式(如 (x + 5) * max(y,10)

完整代码实现

#include <iostream>
#include <memory>
#include <unordered_map>
#include <vector>
#include <sstream>
#include <cctype>
#include <cmath>

// ====================== 解释器核心组件 ======================
class Context {
   
public:
    std::unordered_map<std::string, double> variables;
    double getVariable(const std::string& name) const {
   
        auto it = variables.find(name);
        if (it == variables.end()) throw std::runtime_error("Undefined variable: " + name);
        return it->second;
    }
};

class Expression {
   
public:
    virtual double interpret(const Context& ctx) const = 0;
    virtual ~Expression() = default;
};

// ====================== 终结符表达式 ======================
class Number : public Expression {
   
    double value;
public:
    Number(double v) : value(v) {
   }
    double interpret(const Context&) const override {
    return value; }
};

class Variable : public Expression {
   
    std::string name;
public:
    Variable(std::string n) : name(std::move(n)) {
   }
    double interpret(const Context& ctx) const override {
   
        return ctx.getVariable(name);
    }
};

// ====================== 非终结符表达式 ======================
class AddExpr : public Expression {
   
    std::unique_ptr<Expression> left, right;
public:
    AddExpr(Expression* l, Expression* r) : left(l), right(r) {
   }
    double interpret(const Context& ctx) const override {
   
        return left->interpret(ctx) + right->interpret(ctx);
    }
};

class MultiplyExpr : public Expression {
   
    std::unique_ptr<Expression> left, right;
public:
    MultiplyExpr(Expression

相关文章:

  • Vue2 和 Vue3 的区别
  • 高级推理的多样化推理与验证
  • 前端(AJAX)学习笔记(CLASS 3):AJAX原理
  • 2025年度福建省职业院校技能大赛中职组“网络建设与运维”赛项规程模块三
  • 从Revit建模软件的“编辑”操作分析:构件与编辑 = 数据结构与算法
  • 【排版教程】如何在Word/WPS中优雅的插入参考文献
  • 鸿蒙-做一个简版的富文本解析控件
  • Docker+Kubernetes_第一章_Docker入门
  • Spring Boot文件上传
  • 设备树及gpio子系统及ioctl控制及字符设备驱动及内核模块编程事项仨LED灯说点就点说灭就灭
  • 计算机原理第三章——存储器(未完善
  • 计算机网络面试知识点总结
  • 一文说清楚编码、摘要、加密、公钥、私钥、解密、签名、验签
  • 具有整合各亚专科医学领域知识能力的AI智能体开发纲要(2025版)
  • docker基操
  • Unity游戏制作中的C#基础(4)数组声明和使用
  • Python 高级特性-迭代
  • 写大论文的word版本格式整理,实现自动生成目录、参考文献序号、公式序号、图表序号
  • Orange 单体架构 - 快速启动
  • VMware Workstation安装Windows10
  • 鸿蒙电脑正式发布,余承东:国产软件起步晚,基础弱,探索面向未来的电脑体验
  • 张宇祥已任上海闵行区委常委、副区长
  • 男子服用头孢后饮酒应酬致昏迷在家,救援人员破门施救后脱险
  • 夜驾遇东北虎隔窗对视?延吉林业局:村里有牛被咬死,保险公司会理赔
  • 谷神星一号海射型遥五运载火箭发射成功
  • 脱欧后首次英欧峰会召开前夕,双方却因渔业和青年流动议题僵住了