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

读书笔记21:解释器模式

 1、定义
    给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
该模式很好理解就是,目的就是解释。比如说世界上的各个地区和国家的汉字各不相同,但是需要表达的意思是相同的。同样描述吃饭的,中国叫吃饭,老外叫Eat...所以解释器模式是指,在程序中,一些符号或字符等需要在特定的条件下解释成这样,在另一情况下解释成那样。
2、角色
这个模式角色就一个解释器,
AbstractExpression——它的参数是需要解释的内容。
3、模型
抽象的解释操作类。

    public abstract class AbstractExpression
{
public abstract void Interpret(Context context);
}

终结符表达式。

    public class TerminalExpression : AbstractExpression
{
public override void Interpret(Context context)
{
Console.WriteLine("终端解释器");
}
}

非终结符表达式。

    public class NonterminalExpression : AbstractExpression
{
public override void Interpret(Context context)
{
Console.WriteLine("非终端解释器");
}
}

除解释器外的一些变量

    public class Context
{
private string input;
private string output;
public string Input
{
get { return input; }
set { input = value; }
}
public string Output
{
get { return output; }
set { output = value; }
}
}

调用

    class Program
{
static void Main(string[] args)
{
Context context = new Context();
List<AbstractExpression> list = new List<AbstractExpression>();
list.Add(new TerminalExpression());
list.Add(new NonterminalExpression());
list.Add(new TerminalExpression());
list.Add(new NonterminalExpression());
foreach (AbstractExpression expression in list)
{
expression.Interpret(context);
}
Console.ReadLine();
}
}

结果

例子
将阿拉伯数字转为汉字。
继承抽象解释器。

    public class Expression:AbstractExpression
{
public override void Interpret(Context context)
{
string numStr = "0123456789";
string chineseStr = "零一二三四五六七八九";
char[] c = context.Input.ToCharArray();
for (int i = 0; i < c.Length; i++)
{
int index = numStr.IndexOf(c[i]);
if (index != -1)
{
c[i] = chineseStr.ToCharArray()[index];
}
}
context.Output = new string(c);
Console.WriteLine(context.Output);
}
}

调用

  static void Main(string[] args)
{
Context context = new Context();
List<AbstractExpression> list = new List<AbstractExpression>();
context.Input = "589";
list.Add(new Expression());
foreach (Expression ex in list)
{
ex.Interpret(context);
}
Console.ReadLine();
}

结果显示

代码:http://download.csdn.net/detail/yysyangyangyangshan/4149019


http://www.taodudu.cc/news/show-4565072.html

相关文章:

  • 【physx/wasm】在physx中添加自定义接口并重新编译wasm
  • excel---常用操作
  • Lora训练Windows[笔记]
  • linux基础指令讲解(ls、pwd、cd、touch、mkdir)
  • InnoDB 事务处理机制
  • 启明云端ESP32 C3 模组WT32C3通过 MQTT 连接 AWS
  • 【Python】读书笔记:Python基础教程-项目1-即时标记
  • java核心技术读书笔记—继承
  • “Let’s Eat Grandma”:标点符号(句法树)增强语义表达,用于情感分析
  • Java编程思想读书笔记——第十章:内部类
  • Python基础教程(第2版)读书笔记
  • 基于安卓的公司员工考勤系统的设计与实现
  • 职工考勤管理系统
  • 员工考勤管理系统html,一种员工考勤管理系统的制作方法
  • 内存的类型
  • Linux命令_Note1
  • 计算机体系结构——内存
  • 《Unity Shader入门精要》笔记02 第1章+第2章
  • 30天自制OS学习笔记 (四)C语言与画面显示的练习
  • 自制操作系统日志——第四天
  • Linux Graphics 周刊(第 5 期)
  • unity3D 移动平台性能优化
  • 计算机外围设备
  • 轻量级模型设计/部署
  • 30天自制操作系统学习-第8天
  • 【操作系统】30天自制操作系统--(9)叠加处理
  • C语言VRAM字符串平滑移动,航空数字化仪表中动画显示技术的应用
  • 第4天:C语言与画面显示的练习
  • 显卡 内存分配 linux,【原创】Linux环境下的图形系统和AMD R600显卡编程(4)——AMD显卡显存管理机制...
  • 用C语言开发NES游戏(CC65)03、VRAM缓冲区
  • dm8148 开发只boot启动参数vram=128简介
  • 虚拟机服务器CPU授权,vSphere5全新的许可授权方式——CPU许可+vRAM授权
  • 8位色320*200分辨率下的屏幕坐标与VRAM地址计算
  • VRAM
  • CCE to REG bundle
  • 华为云云容器引擎CCE踩坑记