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

php建设网站工具商标设计网格

php建设网站工具,商标设计网格,广西壮族自治区地图全图,wordpress在线建站【声明】本题目来源于卡码网#xff08;卡码网KamaCoder#xff09; 【提示#xff1a;如果不想看文字介绍#xff0c;可以直接跳转到C编码部分】 【设计模式大纲】 【简介】 --什么是解释器模式#xff08;第22种设计模式#xff09; 解释器模式#xff08;Interpreter… 【声明】本题目来源于卡码网卡码网KamaCoder 【提示如果不想看文字介绍可以直接跳转到C编码部分】 【设计模式大纲】 【简介】 --什么是解释器模式第22种设计模式 解释器模式Interpreter Pattern是⼀种行为型设计模式它定义了⼀个语⾔的⽂法并且建⽴⼀个【解释器】来解释该语⾔中的句子。         比如说SQL语法、正则表达式这些内容比较简短但是表达的内容可不仅仅是字⾯上的那些符号计算机想要理解这些语法就需要解释这个语法规则因此解释器模式常⽤于实现编程语⾔解释器、正则表达式处理等场景。 【基本结构】 解释器模式主要包含以下⼏个角色 1. 抽象表达式Abstract Expression 定义了解释器的接口包含了解释器的⽅法 interpret 。2. 终结符表达式Terminal Expression 在语法中不能再分解为更⼩单元的符号。3. 非终结符表达式Non-terminal Expression 文法中的复杂表达式它由终结符和其他⾮终结符组成。4. 上下文Context 包含解释器之外的⼀些全局信息可以存储解释器中间结果也可以⽤于向解释器传递信息。 举例来说表达式 3 5 * 2数字 3 和 5 2 是终结符⽽运算符 , *都需要两个操作数, 属于⾮终结符。 【简易实现-Java】 1. 创建抽象表达式接口 定义解释器的接⼝声明⼀个 interpret ⽅法用于解释语⾔中的表达式。 // 抽象表达式接⼝ public interface Expression {int interpret(); } 2. 创建具体的表达式类 实现抽象表达式接口用于表示语⾔中的具体表达式。 public class TerminalExpression implements Expression {private int value;public TerminalExpression(int value) {this.value value;}Overridepublic int interpret() {return value;} } 3. 非终结符表达式 抽象表达式的⼀种⽤于表示语⾔中的⾮终结符表达式通常包含其他表达式。 public class AddExpression implements Expression {private Expression left;private Expression right;public AddExpression(Expression left, Expression right) {this.left left;this.right right;}Overridepublic int interpret() {return left.interpret() right.interpret();} } 4. 上下文 包含解释器需要的⼀些全局信息或状态。 public class Context {// 可以在上下⽂中存储⼀些全局信息或状态 } 5. 客户端 构建并组合表达式然后解释表达式。 public class Main {public static void main(String[] args) {Context context new Context();Expression expression new AddExpression(new TerminalExpression(1),new TerminalExpression(2));int result expression.interpret();System.out.println(Result: result);} } 【使用场景】 当需要解释和执⾏特定领域或业务规则的语⾔时可以使用解释器模式。例如SQL解释器、正则表达式解释器等。但是需要注意的是解释器模式可能会导致类的层次结构较为复杂同时也可能不够灵活使用要慎重。 【C编码部分】 1. 题目描述 小明正在设计一个计算器用于解释用户输入的简单数学表达式每个表达式都是由整数、加法操作符、乘法操作符组成的表达式中的元素之间用空格分隔请你使用解释器模式帮他实现这个系统。 2. 输入描述 每行包含一个数学表达式表达式中包含整数、加法操作符和乘法操作符*。 表达式中的元素之间用空格分隔。 3. 输出描述 对于每个输入的数学表达式每行输出一个整数表示对应表达式的计算结果。 4. C编码示例 注意 其中的解析表达式函数比较抽象但不是解释器模式的核心无需太过关注只需要了解到这种模式的特定即可。 /** * version Copyright (c) 2024 NCDC, Servo。 Unpublished - All rights reserved * file InterpreterMode.hpp * brief 解释器模式 * autor 写代码的小恐龙er * date 2024/01/26 */#include iostream #include string #include stack #include vectorusing namespace std;// 前置声明// 表达式 接口类 class Expression; // 终结符表达式类 -- 数字 class NumberExpression; // 非终结符表达式 -- 加法运算符 class AddExpression; // 非终结符表达式 -- 乘法运算符 class MultiplyExpression; // 上下文类 class Context;// 类的定义// 表达式 接口类 class Expression { public:virtual int Interpret() 0;virtual string ReturnType() 0; };// 终结符表达式类 -- 数字 class NumberExpression : public Expression { private:int _number; public:NumberExpression(int number){this-_number number;}// 重载接口函数int Interpret() override{return _number;}string ReturnType() override{return number;} };// 非终结符表达式 -- 加法运算符 class AddExpression : public Expression { private:Expression * _left;Expression * _right; public:AddExpression(){}AddExpression(Expression * left, Expression * right){this-_left left;this-_right right;}// 重载接口函数int Interpret() override{return _left-Interpret() _right-Interpret();}string ReturnType() override{return ;} };// 非终结符表达式 -- 乘法运算符 class MultiplyExpression : public Expression { private:Expression * _left;Expression * _right; public:MultiplyExpression(){}MultiplyExpression(Expression * left, Expression * right){this-_left left;this-_right right;}// 重载接口函数int Interpret() override{return _left-Interpret() * _right-Interpret();}string ReturnType() override{return *;} };// 上下文类 class Context { private:stackExpression * _expressionSt; public:void PushExpression(Expression * expression){_expressionSt.push(expression);}void PopExpression(){_expressionSt.pop();} };// 解析输入的表达式 【有点复杂 -- 花了一个多小时想出来的】 Expression *ParseExpression(string input){// 存放 表达式类vectorExpression * result;// 存放 加号表达式 【消除 乘号表达式】stackExpression * resultAdd;int i 0;// 本次时间复杂度为 O(n)的操作为 寻找出所有的 表达式类while(i (int)input.size()){string number ;char temp input[i];while(temp 0 temp 9){number input[i];temp input[i];if(temp || temp \0){result.push_back(new NumberExpression((int)atoi(number.c_str())));}}if(temp ){result.push_back(new AddExpression());}else if(temp *){result.push_back(new MultiplyExpression());}i;}// 由于 表达式 均是 数字 符号 的连接形式 // 则 我们可以 先将 所有的乘号 消除 转换为Multiplyexpression// 最后将所有的 转换为-个AddExpression;// 这个for 循环 找出所有乘号 时间复杂度 O(n)int size result.size();for(i 0; i size; i){if(result[i] result[i]-ReturnType() *){if(i - 1 0 i 1 size){// 这行代码的目的是将 其中一个加数 pop出去 变成 乘数if(!resultAdd.empty()) resultAdd.pop();resultAdd.push(new MultiplyExpression(result[i - 1], result[i 1]));result[i] nullptr;i;result[i] nullptr;}else return nullptr;}else if(result[i] (result[i]-ReturnType() number || result[i]-ReturnType() )){resultAdd.push(result[i]);}}// 本次操作为 将所有的 加法 转换为 一个 表达式类 while(resultAdd.size() 3){Expression *left resultAdd.top();resultAdd.pop();Expression *add resultAdd.top();resultAdd.pop();Expression *right resultAdd.top();resultAdd.pop();// 将 加号 运算符 添加进 栈add new AddExpression(left, right);resultAdd.push(add);if(resultAdd.size() 3) break;}return resultAdd.top(); }// 在vs2022里面可以正常运行 // 测试用例: // 2 3 // 2 * 3 // 2 2 * 3 // 2 * 3 2 // 2 2 * 3 1 // 2 * 3 1 3 * 2 int main() {// 新建上下文类Context *context new Context();// 输入的表达式string input ;while(std::cin input){// 表达式解析Expression *expression ParseExpression(input);if(expression){// 通过上下文类来保存一些关键信息context-PushExpression(expression);// 通过一个 表达式 解析后的 唯一表达式来进行原酸std::cout expression-Interpret() endl;}else std::cout Invalid expression. endl;}delete context;context nullptr;return 0; }...... To be continued. 【再有最后一种设计模式了 下午更新】
http://www.pierceye.com/news/156708/

相关文章:

  • 建站公司网站的关键词怎么设置
  • 上海二手房网站制作游戏需要什么技术
  • 湖州市城市建设档案馆网站电子商务网站怎么建
  • 网站超级外链做企业网站大约多少钱
  • 中国网站建设市场分析桂林公司网站搭建
  • 阿里云 企业网站选哪种洞窝app是谁开发的
  • ppt模板做的好的网站有哪些wordpress 多站点设置
  • ui作品集 网站怎么做网站制作加我
  • 自助做网站wordpress更换本地主题
  • 凡科网多页网站怎样做一线城市做网站工资有多少
  • .asp网站怎么做需要一个网站
  • 免费网站代码大全网站开发费入什么费用
  • 网站域名注册多少钱搜索引擎优化工具深圳
  • 学建设网站去哪里学建网站要大约多少钱
  • 网站正则表达式怎么做网站维护一般需要多久
  • 北京网站优化价格有没有做花卉种子的网站啊
  • 资源型网站建设 需要多大硬盘vi设计方案模板
  • 网站怎么做图片放映效果代码怎么生成网站
  • 怎么写代码做网站建投商务网官网
  • 江西那家做网站公司好各类网站建设
  • 做网站和服务器的大小有关吗it培训课程
  • 湖南网站建设公司 搜搜磐石网络网站推广模板
  • 网站是软件吗页网站设计
  • 网站服务器搭建及配置的具体步骤如果自己制作网站
  • 湖北餐饮网站建设做排版的网站
  • 广东省建设教育协会官方网站首页世界上最有趣的网站
  • 平面构成作品网站手机网页qq登录
  • 厦门app开发网站开发公司电话重庆网站排名外包
  • 个人备案经营网站用自己网站做邮箱域名解析
  • 为什么大公司开发网站做英文网站网站犯法吗