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

郑州华恩科技做网站怎么样长沙seo优化价格

郑州华恩科技做网站怎么样,长沙seo优化价格,青岛做公司网站的多吗,营销管理咨询定义 给定一个语言,定义它的文法的一种表示,并定义一种解释器,这个解释器使用该表示来解释语言中的句子。 应用场景 在软件构建过程中,如果某一特定领域的问题比较复杂,类似的结构不断重复出现,如果使用…

定义

给定一个语言,定义它的文法的一种表示,并定义一种解释器,这个解释器使用该表示来解释语言中的句子。

应用场景

  • 在软件构建过程中,如果某一特定领域的问题比较复杂,类似的结构不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化。
  • 在这种情况下,将特定领域的问题表达为某种语法规则下的句子,然后构建一个解释器来解释这样的句子,从而达到解决问题的目的。

结构

在这里插入图片描述

代码示例

//Interpreter.h
/****************************************************/
#ifndef INTERPRETER_H
#define INTERPRETER_H
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <stack>using namespace std;// 抽象表达式类
class Expression 
{
public:// 解释virtual int interpret() = 0;};// 数字表达式类
class NumberExpression : public Expression 
{
public:// 构造函数NumberExpression(int num) : number(num) {}// 解释virtual int interpret() { return number; }private:int number;
};// 加法表达式类
class AddExpression : public Expression 
{
public:// 构造函数AddExpression(Expression* left, Expression* right) : left(left), right(right) {}// 解释virtual int interpret() { return left->interpret() + right->interpret(); }private:Expression* left;Expression* right;
};// 减法表达式类
class SubExpression : public Expression 
{
public:// 构造函数SubExpression(Expression* left, Expression* right) : left(left), right(right) {}// 解释virtual int interpret() { return left->interpret() - right->interpret(); }private:Expression* left;Expression* right;
};// 解释器类
class Interpreter 
{
public:// 构造函数Interpreter(string exp) : expression(exp) {}// 解释int interpret() {stack<Expression*> s;// 遍历表达式字符for (int i = 0; i < expression.length(); i++) {if (isdigit(expression[i])) {// 识别数字int j = i;while (j < expression.length() && isdigit(expression[j])) {j++;}int num = stoi(expression.substr(i, j - i));s.push(new NumberExpression(num));i = j - 1;}else if (expression[i] == '+') {// 把左数提取出来Expression* left = s.top();s.pop();// 识别右数int j = i + 1;while (j < expression.length() && isdigit(expression[j])) {j++;}Expression* right = new NumberExpression(stoi(expression.substr(i + 1, j - (i + 1))));// 左数+右数的表达式放入栈中s.push(new AddExpression(left, right));i = j - 1;}else if (expression[i] == '-') {// 把左数提取出来Expression* left = s.top();s.pop();// 识别右数int j = i + 1;while (j < expression.length() && isdigit(expression[j])) {j++;}Expression* right = new NumberExpression(stoi(expression.substr(i + 1, j - (i + 1))));// 左数-右数的表达式放入栈中s.push(new SubExpression(left, right));i = j - 1;}}return s.top()->interpret();}private:string expression;
};#endif
//test.cpp
/****************************************************/
#include "Interpreter.h"#include <unordered_map>
int main()
{unordered_map<string, int> variables;string input;while (getline(cin, input)) {cout << "input:" << input << endl;Interpreter interpreter(input);variables[input] = interpreter.interpret();cout << "result:" << variables[input] << endl;}return 0;
}

运行结果
在这里插入图片描述

要点总结

  • Interpreter模式的应用场合是Interpreter模式应用中的难点,只有满足“业务规则频繁变化,且类似的结构不断重复出现,并且容易抽象为语法规则的问题”才适合使用Interpreter模式。
  • 使用Interpreter模式来表示文法规则,从而可以使用面向对象技巧来方便地“扩展”文法。
  • Interpreter模式比较适合简单的文法表示,对于复杂的文法表示,Interperter模式会产生比较大的类层次结构,需要求助于语法分析生成器这样的标准工具。
http://www.mmbaike.com/news/89673.html

相关文章:

  • 广东专业网站定制十大seo免费软件
  • 怎么做注册账号的网站快速排名软件案例
  • 东莞建英文网站的公司线上营销怎么做
  • 设计感的网站沈阳全网推广公司哪家好
  • 网站内链的作用网络宣传渠道有哪些
  • 在线课堂网站开发在百度上打广告找谁推广产品
  • 网站源码下载有什么用seo创业
  • 网站建设seo运营规划做企业推广的公司
  • wordpress 影楼关键词首页排名优化公司推荐
  • 做门户网站广告网络营销推广方案设计
  • 网站优化培训如何优化网站注册时间查询
  • 重庆景点排名前十seo优化工具有哪些
  • e时代网站制作兰州seo
  • 普通展示型网站站长工具使用方法
  • 网站seo快速排名临沂seo公司
  • 一个网址建多个网站一站传媒seo优化
  • 郑州中色十二冶金建设有限公司网站网页怎么做出来的
  • 阿里云服务器如何用IP做网站网络推广哪家做得比较好
  • wap手机网站开发asp经验seo日常工作内容
  • 做网站必须有站点吗百度提交网站的入口地址
  • 图片拼接做网站背景软文什么意思
  • 奇迹网站自己做百度商家入驻
  • 网站公告栏代码十大免费网站推广平台
  • 影视公司网站设计东莞整站优化排名
  • 深圳平台推广河南网站seo
  • 做网站注册几类商标百度推广登陆平台
  • 网站建设 概念谷歌广告开户
  • 住房和城乡建设部办公厅海外seo是什么
  • 郑州抖音代运营公司重庆百度关键词优化软件
  • flash网站模板免费下载数据分析师培训机构