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

优设计网站建设脱贫地区农副产品网络销售平台

优设计网站建设,脱贫地区农副产品网络销售平台,263企业邮箱登录入口263,做商城的网站程序作者#xff1a;翟天保Steven 版权声明#xff1a;著作权归作者所有#xff0c;商业转载请联系作者获得授权#xff0c;非商业转载请注明出处 一、解释器模式是什么#xff1f; 解释器模式是一种行为型的软件设计模式#xff0c;定义了一个解释器#xff0c;来解释给定语…作者翟天保Steven 版权声明著作权归作者所有商业转载请联系作者获得授权非商业转载请注明出处 一、解释器模式是什么 解释器模式是一种行为型的软件设计模式定义了一个解释器来解释给定语言和文法的句子。也可以理解为翻译吧比如11翻译为一加上一等于二这样就做成了一个简单的加法计算器。 解释器模式的优点 良好扩展性。语法的翻译通过类来实现扩展类可以扩展其解释能力。易实现。语法树中每个表达式节点类具备一定相似性实现起来相对容易。 解释器模式的缺点 执行效率低。解释器中通常有大量循环和递归语句当被解释句子较复杂时程序的性能受到较大影响。类膨胀。规则较多时类数量也膨胀。 二、解释器模式 2.1 结构图 客户端即Main主函数客户端通过解释器来解析表达式内容表达式又分为终结型和非终结型。就拿计算器举例11,1就是终结符类型表达式可以用它结尾而就是非终结符类型出现了就意味着它前后还有别的表达式字符自然不能作终结。 2.2 代码示例 场景描述实现简单的加减法计算器。 //Interpreter.h /****************************************************/ #pragma once #include iostream #include vector #include string #include algorithm #include stackusing namespace std;// 抽象表达式类 class Expression { public:// 解释virtual int interpret() 0;};// 数字表达式类 class NumberExpression : public Expression { public:// 构造函数NumberExpression(int num) : number(num) {}// 解释virtual int interpret() { return number; }private:int number; };// 加法表达式类 class AddExpression : public Expression { public:// 构造函数AddExpression(Expression* left, Expression* right) : left(left), right(right) {}// 解释virtual int interpret() { return left-interpret() right-interpret(); }private:Expression* left;Expression* right; };// 减法表达式类 class SubExpression : public Expression { public:// 构造函数SubExpression(Expression* left, Expression* right) : left(left), right(right) {}// 解释virtual int interpret() { return left-interpret() - right-interpret(); }private:Expression* left;Expression* right; };// 解释器类 class Interpreter { public:// 构造函数Interpreter(string exp) : expression(exp) {}// 解释int interpret() {stackExpression* s;// 遍历表达式字符for (int i 0; i expression.length(); i) {if (isdigit(expression[i])) {// 识别数字int j i;while (j expression.length() isdigit(expression[j])) {j;}int num stoi(expression.substr(i, j - i));s.push(new NumberExpression(num));i j - 1;}else if (expression[i] ) {// 把左数提取出来Expression* left s.top();s.pop();// 识别右数int j i 1;while (j expression.length() isdigit(expression[j])) {j;}Expression* right new NumberExpression(stoi(expression.substr(i 1, j - (i 1))));// 左数右数的表达式放入栈中s.push(new AddExpression(left, right));i j - 1;}else if (expression[i] -) {// 把左数提取出来Expression* left s.top();s.pop();// 识别右数int j i 1;while (j expression.length() isdigit(expression[j])) {j;}Expression* right new NumberExpression(stoi(expression.substr(i 1, j - (i 1))));// 左数-右数的表达式放入栈中s.push(new SubExpression(left, right));i j - 1;}}return s.top()-interpret();}private:string expression; }; //main.cpp /****************************************************/ #include iostream #include string #include unordered_map #include Interpreter.husing namespace std;int main() {unordered_mapstring, int variables;string input;while (getline(cin, input)) {cout input: input endl;Interpreter interpreter(input);variables[input] interpreter.interpret();cout result: variables[input] endl;}return 0; }程序结果如下。 上述实现的简易计算器也是许多大学C/C课程中的大作业记得以前用MFC实现了一款计算器开心了老半天哈哈梦回大学。感兴趣的同学也可以试试复杂计算器比如引入了括号还有各类运算符。 三、总结 我尽可能用较通俗的话语和直观的代码例程来表述我对解释器模式的理解或许有考虑不周到的地方如果你有不同看法欢迎评论区交流希望我举的例子能帮助你更好地理解解释器模式。 如果文章帮助到你了可以点个赞让我知道我会很快乐~加油
http://www.dnsts.com.cn/news/275419.html

相关文章:

  • 南宁市企业网站建设中山企业网站推广公司
  • 做展板好的网站wordpress为何经常被黑
  • 网站建设_广州网站建设专业公司网站怎么发邮件
  • 营销网站建设服务平台网络营销是什么内容
  • 凤岗东莞微信网站建设云南省住房和城乡建设厅官方网站
  • 网站建设 自学线上营销渠道有哪些
  • 哪些网站可以加锚文本著名的网络营销案例
  • 扁平化购物网站模板电子政务门户网站建设
  • ui怎样做网站做网站需要考虑seo吗
  • 网站备案号 如何添加添加网站栏目的步骤
  • 一个网站交互怎么做的长春建网站
  • 客户评论 网站建设网络推广渠道分类
  • 北京网站建设最好公司百度灰色关键词代发
  • 做宴会网站wordpress如何进入后台
  • 曾经做网站网站代理域名注册和网站设计服务
  • 文案推广发布网站大全深圳制作公司网站的公司
  • wordpress 建站模板设计网页价格
  • 做网站定金要多少如何推广网站网站推广常用方法
  • 湛江网站营销阳江企业网站
  • 网站建设企业济南平面设计学费多少钱
  • 做ppt网站有哪些内容吗门户网站的意义
  • 网站开发制作费用废旧建筑模板多少钱一吨
  • 遵义网站制作一般需要多少钱施工企业平台
  • 珠海网站怎样建设网站模仿
  • 滨海做网站价格杭州seo招聘
  • 织梦摄影网站源码网站建设改版目的
  • 网站logo设计教程泰州网站建设托管
  • 做百度推广去些网站加客户徐州网站开发服务
  • 北京城市建设档案馆网站国内网站必须备案吗
  • 商品网站建设实验格式专门网站建设