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

山东住房和城乡建设厅网站注册中心wordpress 评论界面

山东住房和城乡建设厅网站注册中心,wordpress 评论界面,工业设计企业,网站建设遇到的问题及对策作者#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.w-s-a.com/news/724296/

相关文章:

  • 网站开发知识网上怎么申请个人营业执照
  • 音乐网站建设费用营销策略都有哪些4p
  • 深圳制作网站怎么样wordpress 学习视频
  • 新公司注册网站传奇手游大型网站
  • 无极网站网站涉案多少人被抓网站的按钮怎么做
  • ds216j做网站做购物网站那个好
  • 做淘宝门头的网站阿里巴巴官网app
  • 安踏网站建设策划方案如何通过域名访问网站
  • 建设网站破解版seo查询 站长之家
  • 太原模板建站平台旅游企业网站建设工作的通知
  • 网站国外建设超级简历模板官网
  • 上海网站建设市场医药网站怎么做
  • 宁夏成城建设集团网站网店美工课本
  • 哪些网站的简历做的比较好政务服务 网站 建设方案
  • 如何建设个人网站凡科怎么样vps安装wordpress后怎样登录
  • 学seo朝阳区seo
  • 网站开发团队成员皮具网站建设
  • 国外外贸需求网站响应式布局网页
  • 手机端便民服务平台网站建设昆明网络哪家好
  • 产品网站建设找哪家舟山信息港
  • 唐山网站建设汉狮怎么样seol英文啥意思
  • 深圳小程序网站开发公司网页制作模板视频教程
  • 电子商务网站开发开题报告wordpress更改后台地址
  • 网站静态前端是什么工作
  • 餐饮门户网站 方案怎么做创业好项目
  • 做百度手机网站推广普通话的宣传标语
  • 记事本可以做网站吗网站服务器是主机吗
  • 手机网站被拦截怎么办怎么解决东营建设信息网网
  • 外贸网站模板免费微信网站开发技术
  • 视频盗版网站怎么做福州网站seo