当前位置: 首页 > 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.yayakq.cn/news/231980/

相关文章:

  • 网站改版需要重新备案吗php+mysql网站开发
  • 公司做网站都需要什么网络新项目首码发布渠道
  • 建设中网站源码如何做国外外贸网站
  • 网站建设外文文献翻译自建网站支付问题
  • steam官方网站下载wordpress自动伪原创
  • 网站建设效果瑞安市公用建设局网站
  • 做商城网站价格ppt一键优化
  • 广东网站建设公司网络服务有哪些网站可以做外贸
  • php婚庆网站源码阿里云域名注册邮箱
  • 郑州做网站那家好wordpress 置顶文章
  • 电工培训内容seo网站诊断分析报告
  • 设计公司资质怎么申请googleseo新手怎么做
  • 个人网站界面模板产品营销软文
  • 青海网站设计企业服饰怎么做网站推广
  • 什邡网站建设公司66建筑网
  • 网站源码在哪看梵克雅宝手链
  • 青岛崂山区网站建设wordpress域名访问
  • 新手做市场分析的网站新媒体营销工具有哪些
  • 建站系统的选用分析网站升级公告模板
  • 四川省建设工程设备安全协会网站免费的网络软件
  • 汽车配件外贸出口公司河北利用关键词优化网页
  • 丽水做企业网站的地方wp做网站难吗
  • 做体彩网站怎么做海口注册公司代理公司地址电话
  • 做网站要懂什么编程申请做网站
  • 网站用哪些系统做的比较好上海闵行刚刚发生的
  • 延吉市建设局网站WordPress 类型 网页
  • 怎么用ftp管理网站php空间放两个网站
  • 网站可以做315认证吗厦门网站推广的目标
  • 软件 网站开发合作协议关于加强网站建设
  • 网站建设的课程设计表白网站制作源码