2013年07月06日 19:43:00

阅读数:8853

概述:

未来机器智能化已然成为趋势,现在手机都能听懂英语和普通话,那我大中华几万种方言的被智能化也许也是趋势,我们的方言虽然和普通话相似,但是还是不一样的。这可能需要一个新的语法分析器来帮助我们。

我们的解释器模式就是描述了如何为简单的语言定义一个文法,如何在该语言中表示一个句子,以及如何解释这些句子。

但是解释一门自然语言是复杂的过程,我们以加减运算为例子来详细解释解释器模式。

UML类图:

// Interpreter.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <map>
#include <string>
#include<iostream>
using namespace std; class Context
{
private:
map<string,int> valueMap; public:
void addValue(string key,int value)
{
valueMap.insert(std::pair<string,int>(key,value));
} int getValue(string key)
{
return valueMap[key];
}
}; class AbstractExpression
{
public :
virtual int interpreter(Context context) = ;
}; class AddNonterminalExpression:public AbstractExpression
{
private :
AbstractExpression *left;
AbstractExpression *right;
public:
AddNonterminalExpression(AbstractExpression *left, AbstractExpression *right)
{
this->left = left;
this->right = right;
}
int interpreter(Context context)
{
return this->left->interpreter(context) + this->right->interpreter(context);
}
}; class SubtractNonterminalExpression:public AbstractExpression
{
private :
AbstractExpression *left;
AbstractExpression *right;
public:
SubtractNonterminalExpression(AbstractExpression *left, AbstractExpression *right)
{
this->left = left;
this->right = right;
}
int interpreter(Context context)
{
return this->left->interpreter(context) - this->right->interpreter(context);
}
}; class TerminalExpression :public AbstractExpression
{
private:
int i;
public:
TerminalExpression(int i)
{
this->i = i;
}
int interpreter(Context context)
{
return this->i;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
//a-b+c
cout<<"解释器模式:a-b+c"<<endl;
Context context;
context.addValue("a",);
context.addValue("b",);
context.addValue("c",);
SubtractNonterminalExpression *subtractValue = new SubtractNonterminalExpression(new TerminalExpression(context.getValue("a")),new TerminalExpression(context.getValue("b")));
AddNonterminalExpression *addValue = new AddNonterminalExpression(subtractValue,new TerminalExpression(context.getValue("c")));
cout<< addValue->interpreter(context)<<endl;
return ;
}

最新文章

  1. Oracle 11g系列:约束
  2. GPU基本概念详解
  3. 一、HTML和CSS基础--网页布局--如何用css进行网页布局
  4. 蓝牙BLE ATT剖析(一)
  5. 《深入Java虚拟机学习笔记》- 第5章 Java虚拟机
  6. Socket之UDP分包组包
  7. Java基础知识强化之集合框架笔记50:Map集合之Map集合的概述和特点
  8. java基础01
  9. STL内存分配
  10. 通俗易懂的Java序列化原理
  11. 在centos6编译配置httpd2.4的N种方法
  12. LeetCode之“数学”:Rectangle Area
  13. jmeter接口测试------基础笔记
  14. 使用cpanm安装perl相关模块
  15. Css预处理器---Less(二)
  16. jade直接写类似JavaScript语法的东西,不需要写script
  17. 在ViewDidLoad中往导航栈推ViewController报错
  18. wget 抓取整站
  19. gulp 定义依赖关系
  20. Selenium - Switch &amp; Select Api

热门文章

  1. spring boot 启动后执行初始化方法
  2. opencv-python 学习初探2 去图片水印
  3. [Java中实现国际化] - 配合thymeleaf实现中英文自动切换(多语言)
  4. axis2框架用wsdl文件生成的服务端MessageReceiveInOut文件注意事项
  5. ftp协议及vsftpd的基本应用
  6. UVa 1660 电视网络(点连通度+最小割最大流+Dinic)
  7. UVa 437 巴比伦塔
  8. shell 使用变量
  9. Could not find a package configuration file provided by &quot;ecl_build&quot;,.................couldn&#39;t find required component &#39;ecl_build&#39;
  10. 解决在nginx+php环境下$_SERVER[&#39;PHP_SELF&#39;]获取不到值的问题