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

省级精品课程网站廊坊seo公司

省级精品课程网站,廊坊seo公司,长沙网络营销整合收费,网页制作视频教程下载1.定义 给定一个语言#xff0c;定义它的文法的一种表示#xff0c;并定义一个解释器。比如加减乘除在代码里是一种表示#xff0c;我们需要翻译成可以阅读的数学公式#xff0c;并且可以供用户输入数字得到输出结果。 2.组成结构 抽象表达式#xff08;Abstract Expres…1.定义 给定一个语言定义它的文法的一种表示并定义一个解释器。比如加减乘除在代码里是一种表示我们需要翻译成可以阅读的数学公式并且可以供用户输入数字得到输出结果。 2.组成结构 抽象表达式Abstract Expression定义解释器的接口约定解释器的解释操作主要包含解释方法 interpret()。终结符表达式Terminal Expression是抽象表达式的子类用来实现文法中与终结符相关的操作文法中的每一个终结符都有一个具体终结表达式与之相对应。非终结符表达式Nonterminal Expression也是抽象表达式的子类用来实现文法中与非终结符相关的操作文法中的每条规则都对应于一个非终结符表达式。上下文Context通常包含各个解释器需要的数据或是公共的功能一般用来传递被所有解释器共享的数据后面的解释器可以从这里获取这些值。 我们将用示例代码来解释各个组成部分的意义。 3.示例代码 #include iostream #include mapusing namespace std;#define DELETE(pointer) delete pointer; pointernullptr const string key1 string(s1); const string key2 string(s2); const string key3 string(s3); const string key4 string(s4);class Context { public:Context() {datas[key1] 1;datas[key2] 2;datas[key3] 3;datas[key4] 4;}int getValue(string key) {if (!datas.count(key)){return 0;}return datas[key];}private:std::mapstring, int datas; };class Expression { public:Expression(Expression* left, Expression* right) :left(left), right(right) { }virtual ~Expression() {if (left ! nullptr){DELETE(left);}if (right ! nullptr){DELETE(right);}}virtual int interpreter(Context* context) 0;protected:Expression* left;Expression* right; };class MultiExpression : public Expression { public:MultiExpression(Expression* left, Expression* right) : Expression(left, right) { }int interpreter(Context* context) override {if ((left nullptr) || (right nullptr)){return 0;}return left-interpreter(context) * right-interpreter(context);} };class DivisionExpression : public Expression { public:DivisionExpression(Expression* left, Expression* right) : Expression(left, right) { }int interpreter(Context* context) override {if ((left nullptr) || (right nullptr)){return 0;}return left-interpreter(context) / right-interpreter(context);} };class TerminalExpression : public Expression { public:TerminalExpression(int value) : value(value), Expression(nullptr, nullptr) { }int interpreter(Context* context) {return value;}private:int value; };void doInterpreter() // 客户端client {/* 3*4/26 对应语法树如下/ 除法/ \* 2/ \3 4*/Context context;MultiExpression* multiExpression new MultiExpression(new TerminalExpression(context.getValue(key3)), new TerminalExpression(context.getValue(key4))); // 终止节点作为叶子结点非终止节点作为非叶子节点int mutil multiExpression-interpreter(context);cout mutil mutil endl;DivisionExpression* divisionExpression new DivisionExpression(multiExpression, new TerminalExpression(context.getValue(key2))); // 乘法表达式作为左子树 / 右子树int division divisionExpression-interpreter(context); // 运行解释器cout division division endl;DELETE(divisionExpression);// 这里注意不能第二次释放divisionExpression因为此时它是divisionExpression的左子树//divisionExpression释放的时候会自动释放左右子树也就是递归释放最终只需要释放最后一次嵌套调用的就行 }int main() {doInterpreter();system(pause);return 1; } 引用 C设计模式——解释器模式interpreter pattern_cinterpreter模式-CSDN博客
http://www.zqtcl.cn/news/394151/

相关文章:

  • wordpress jp theme关键词排名优化公司成都
  • Soho外贸常用网站wordpress下不了插件吗
  • 企业网站建设小技巧有哪些WordPress网站小程序
  • 公司招聘网站续费申请seo编辑是干什么的
  • 58同城泉州网站建设人工投票平台app
  • dede 网站地图 插件网站引导页flash
  • 聊城做网站的公司渠道网站总体结构
  • 北京比较大的网站建设公司wap网站引导页特效
  • 做关于植物的网站即墨网站设计
  • 怎么提升网站收录商品网页制作
  • 做网站建设的平台wordpress5.0发布
  • 站长工具a级查网站域名
  • 免费做网站电话手机开发者模式打开有什么影响
  • 上海免费网站建站模板毕节做网站优化
  • 影响网站建设的关键点手机网站制作app
  • 商务网站建设的流程深圳模板网站建设案例
  • 做中英文网站多少钱方维制网站
  • 做一个信息发布网站要多少钱开发小程序多少钱一个
  • 山东网站设计网站关键词设置技巧
  • 做网站服务怎么赚钱产品展示型的网站功能有哪些
  • 丹东网站制作宁波网站建设公司制作网站
  • 南宁建设工程质量网站九江网站建设九江
  • 永州市住房和城乡建设厅网站服务器可以做几个网站
  • 哪里学网站建设与管理做移动端电影网站
  • 境外企业网站推广大冶市建设局网站
  • 户网站建设的不全.阿里巴巴国际站
  • 定制手机壳的网站能在家做的兼职的网站
  • 温州营销型网站建设郴州网络推广公司
  • asp.net 做网站源代码网站怎么做配置文件夹
  • 网站建设云尚网络wordpress首页flash