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

网站不能粘贴怎么做深圳网站建设方案

网站不能粘贴怎么做,深圳网站建设方案,摄影师作品网站,软件开发培训计划Linux C 058-设计模式之解释器模式 本节关键字:Linux、C、设计模式、解释器模式 相关库函数: 概念 解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。 解释器模式用于构建一…

Linux C++ 058-设计模式之解释器模式

本节关键字:Linux、C++、设计模式、解释器模式
相关库函数:

概念

解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。

解释器模式用于构建一个能够解释特定语言或文法的句子的解释器。解释器模式给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

这种模式被用在 SQL 解析、符号处理引擎等。

优缺点

优点

可扩展性好:容易添加新的解释表达式的方式。
灵活性:可以根据需要轻松扩展或修改文法。
易于实现简单文法:对于简单的语言,实现起来相对容易。

缺点

使用场景有限:只适用于适合使用解释的简单文法。
维护困难:对于复杂的文法,维护和扩展变得困难。
类膨胀:可能会产生很多类,每个文法规则对应一个类。
递归调用:解释器模式通常使用递归调用,这可能难以理解和跟踪。

使用场景

当某一特定类型的问题频繁出现,并且可以通过一种简单的语言来表达这些问题的实例时。
在需要解释执行语言中的句子时,考虑使用解释器模式。
确保文法简单,以避免系统变得过于复杂。

角色说明

解释器模式包含以下几个主要角色:

抽象表达式(Abstract Expression):定义了解释器的抽象接口,声明了解释操作的方法,通常是一个抽象类或接口。

终结符表达式(Terminal Expression):实现了抽象表达式接口的终结符表达式类,用于表示语言中的终结符(如变量、常量等),并实现了对应的解释操作。

非终结符表达式(Non-terminal Expression):实现了抽象表达式接口的非终结符表达式类,用于表示语言中的非终结符(如句子、表达式等),并实现了对应的解释操作。

上下文(Context):包含解释器之外的一些全局信息,在解释过程中提供给解释器使用,通常用于存储变量的值、保存解释器的状态等。

客户端(Client):创建并配置具体的解释器对象,并将需要解释的表达式传递给解释器进行解释。

示例代码

#include <iostream>
#include <string>
using namespace std;class Expression
{
public:Expression() {}bool interpret(string context);
};
class TerminalExpression : public Expression
{
public:TerminalExpression() {}TerminalExpression(string data) {m_Data = data;}bool interpret(string context) {if (context.find(m_Data) != -1)return true;return false;}
private:string		m_Data;
};
class OrExpression : public Expression
{
public:OrExpression() {}OrExpression(Expression *expr1, Expression *expr2) {m_Expr1 = expr1;m_Expr2 = expr2;}bool interpret(string context) {return m_Expr1->interpret(context) || m_Expr2->interpret(context);}
private:Expression		*m_Expr1;Expression		*m_Expr2;
};
class AndExpression : public Expression
{
public:AndExpression() {}AndExpression(Expression *expr1, Expression *expr2) {m_Expr1 = expr1;m_Expr2 = expr2;}bool interpret(string context) {return m_Expr1->interpret(context) && m_Expr2->interpret(context);}
private:Expression		*m_Expr1;Expression		*m_Expr2;
};
class InterpreterPatternDemo
{
public:InterpreterPatternDemo() {}//规则:Robert 和 John 是男性static Expression *getMaleExpression() {Expression *rober = new TerminalExpression("Robert");Expression *john = new TerminalExpression("John");return (Expression *)(new OrExpression(rober, john));}//规则:Julie 是一个已婚的女性static Expression *getMarriedWomanExpression() {Expression *julie = new TerminalExpression("Julie");Expression *married = new TerminalExpression("Married");return (Expression *)(new AndExpression(julie, married));}
};
//
int main(int argc, char *argv[])
{Expression *isMale = InterpreterPatternDemo::getMaleExpression();Expression *isMarriedWoman = InterpreterPatternDemo::getMarriedWomanExpression();cout << "John is male? " << isMale->interpret("John");cout << "Julie is a married women? " << isMarriedWoman->interpret("Married Julie");delete isMale;delete isMarriedWoman;return 0;
}
/*
John is male? true
Julie is a married women? true
*/
http://www.mmbaike.com/news/93014.html

相关文章:

  • 网站建设人工智能开发厦门seo网络推广
  • 购彩网站建设网络销售入门基本知识
  • 免费不良网站代码是多少网站建站哪家公司好
  • 连云港企业网站制作哪里搜索引擎优化好
  • 网站布局结构有哪些网店如何营销推广
  • 做pc端网站方案百度搜索网页版入口
  • 网站制作将栏目分类seo的优化策略有哪些
  • 没有工信部备案的网站是骗子吗焦作关键词优化排名
  • 淮北哪有做淘宝网站网站推广交换链接
  • b站+网站建设厨师培训机构 厨师短期培训班
  • 一个网站可以设多少关键词有域名和服务器怎么建网站
  • 哪些人需要做网站如何编写一个网站
  • 网站开发及运营成本最近中国新闻热点大事件
  • 雄安个人代做网站排名网站销售怎么推广
  • 如何做音乐分享类网站值得收藏的五个搜索引擎
  • 做冷饮的网站无限制访问国外的浏览器
  • html5能单独做网站吗河北seo网络推广
  • 静态网站添加到织梦中国电信视频app下载
  • wordpress模板怎么改成织梦模板北京优化网站公司
  • 域名备案必须要有服务器吗淘宝seo优化是什么意思
  • python如何调用wordpress长沙网站优化对策
  • 怎么创建网站平台.comseo黑帽有哪些技术
  • 全球优秀网页设计机构关键词排名优化怎么样
  • 从做网站可以用现在的名称吗网站seo工具
  • Wordpress屏蔽模仿站爬虫ip手机百度2020
  • 国内优秀食品包装设计商丘seo外包
  • wordpress留言提交慢关键词seo公司推荐
  • 花生壳免费域名注册网站线上如何做推广
  • 哪些网站是用php做的网站登录入口
  • 泰州模板开发建站百度指数搜索榜