国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

設計模式之解釋器模式(C++)

這篇具有很好參考價值的文章主要介紹了設計模式之解釋器模式(C++)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

作者:翟天保Steven
版權聲明:著作權歸作者所有,商業(yè)轉載請聯系作者獲得授權,非商業(yè)轉載請注明出處

設計模式之解釋器模式(C++)

一、解釋器模式是什么?

? ? ? ?解釋器模式是一種行為型的軟件設計模式,定義了一個解釋器,來解釋給定語言和文法的句子。也可以理解為翻譯吧,比如1+1,翻譯為一加上一,等于二,這樣就做成了一個簡單的加法計算器。

? ? ? ?解釋器模式的優(yōu)點:

  1. 良好擴展性。語法的翻譯通過類來實現,擴展類可以擴展其解釋能力。
  2. 易實現。語法樹中每個表達式節(jié)點類具備一定相似性,實現起來相對容易。

? ? ? ?解釋器模式的缺點:

  1. 執(zhí)行效率低。解釋器中通常有大量循環(huán)和遞歸語句,當被解釋句子較復雜時,程序的性能受到較大影響。
  2. 類膨脹。規(guī)則較多時,類數量也膨脹。

二、解釋器模式

2.1 結構圖

? ? ? ?客戶端即Main主函數,客戶端通過解釋器來解析表達式內容,表達式又分為終結型和非終結型。就拿計算器舉例,1+1,1就是終結符類型,表達式可以用它結尾;而+就是非終結符類型,出現了+,就意味著它前后還有別的表達式字符,自然不能作終結。

設計模式之解釋器模式(C++)

2.2 代碼示例

? ? ? ?場景描述:實現簡單的加減法計算器。

//Interpreter.h
/****************************************************/
#pragma once
#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;
};
//main.cpp
/****************************************************/
#include <iostream>
#include <string>
#include <unordered_map>
#include "Interpreter.h"

using namespace std;

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;
}

? ? ? ?程序結果如下。

設計模式之解釋器模式(C++)

? ? ? ?上述實現的簡易計算器,也是許多大學C/C++課程中的大作業(yè),記得以前用MFC實現了一款計算器,開心了老半天哈哈,夢回大學。感興趣的同學也可以試試復雜計算器,比如引入了括號還有各類運算符。

三、總結

? ? ? ?我盡可能用較通俗的話語和直觀的代碼例程,來表述我對解釋器模式的理解,或許有考慮不周到的地方,如果你有不同看法歡迎評論區(qū)交流!希望我舉的例子能幫助你更好地理解解釋器模式。

? ? ? ?如果文章幫助到你了,可以點個贊讓我知道,我會很快樂~加油!文章來源地址http://www.zghlxwxcb.cn/news/detail-432401.html

到了這里,關于設計模式之解釋器模式(C++)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 解釋器設計模式

    解釋器設計模式

    解釋器設計模式(Interpreter Pattern)是一種行為型設計模式,它定義了一種語言的文法,并建立一個解釋器來解釋該語言中的句子。這種模式通常用于需要解釋或執(zhí)行一種特定類型的語言的場景,例如編程語言的編譯器或解釋器、規(guī)則引擎系統(tǒng)等。 關鍵組成部分 抽象表達式(

    2024年02月21日
    瀏覽(93)
  • 設計模式(行為型模式)解釋器模式

    ?? 解釋器模式(Interpreter Pattern) 是一種行為設計模式,用于解釋特定語言或處理特定問題領域的語法或表達式。它定義了一種語言的語法表示,并使用該表示來解釋語言中的句子。通常用于構建解析器、編譯器和規(guī)則評估引擎等場景。 在解釋器模式中,有以下關鍵角色:

    2024年02月20日
    瀏覽(96)
  • Java設計模式-解釋器模式

    Java設計模式-解釋器模式

    一、概述 如上圖,設計一個軟件用來進行加減計算。我們第一想法就是使用工具類,提供對應的加法和減法的工具方法。 上面的形式比較單一、有限,如果形式變化非常多,這就不符合要求,因為加法和減法運算,兩個運算符與數值可以有無限種組合方式。比如 1+2+3+4+5、

    2024年01月17日
    瀏覽(96)
  • js設計模式:解釋器模式

    js設計模式:解釋器模式

    對文本進行解釋和編譯的時候,就會用到解釋器模式 比如你寫了一段js代碼,js引擎就會去解釋并執(zhí)行這段代碼 webpack中的各種loader就是用來解釋各種文件類型的,并將其解釋為js可識別的代碼

    2024年02月22日
    瀏覽(103)
  • 設計模式之解釋器模式筆記

    設計模式之解釋器模式筆記

    記錄下學習設計模式-解釋器模式的寫法。JDK使用版本為1.8版本。 意圖 :定義一個語言,定義它的文法的一種表示,并定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子。 結構 : 其中: AbstractExpression 聲明一個程序的解釋操作,這個接口為抽象語法樹中所有的結點所

    2024年02月11日
    瀏覽(94)
  • 設計模式之解釋器模式(下)

    設計模式之解釋器模式(下)

    3)Context的作用 1.概述 在解釋器模式中,環(huán)境類Context用于存儲解釋器之外的一些全局信息,它通常作為參數被傳遞到所有表達式的解釋方法interpret()中,可以在Context對象中存儲和訪問表達式解釋器的狀態(tài),向表達式解釋器提供一些全局的、公共的數據,此外還可以在Context中

    2024年04月12日
    瀏覽(91)
  • 設計模式(十五)解釋器

    設計模式(十五)解釋器

    定義一個語言的文法,并且建立一個解釋器來解釋該語言中的句子,這里的“語言”是指使用規(guī)定格式和語法的代碼。解釋器模式是一種行為型模式。 解釋器模式是一種使用頻率相對較低但學習難度較大的設計模式,它主要用于描述如何使用面向對象語言構成一個簡單的語言

    2024年02月05日
    瀏覽(89)
  • 解鎖Spring Boot中的設計模式—02.解釋器模式:探索【解釋器模式】的奧秘與應用實踐!

    解鎖Spring Boot中的設計模式—02.解釋器模式:探索【解釋器模式】的奧秘與應用實踐!

    解釋器模式(Interpreter Pattern)是一種行為設計模式,它用于定義語言的文法,并且解釋語言中的表達式。在Java中,解釋器模式可以用于構建解釋器以解析特定的語言或表達式,如數學表達式、查詢語言等。 優(yōu)點: 靈活性: 解釋器模式可以 靈活地添加新的表達式和規(guī)則 ,因

    2024年02月19日
    瀏覽(96)
  • java設計模式之解釋器模式

    java設計模式之解釋器模式

    1.基本介紹 在編譯原理中,一個算術表達式通過詞法分析器形成詞法單遠,而這些詞法單遠再通過語法分析器構建語法分析樹,最終形成一顆抽象的語法分析樹,(詞法分析器和語法分析器都可以看做是解釋器) 解釋器模式是指給定一個語言(表達式),定義它的文法的一種

    2024年02月19日
    瀏覽(573)
  • 設計模式之解釋器模式(C++)

    設計模式之解釋器模式(C++)

    作者:翟天保Steven 版權聲明:著作權歸作者所有,商業(yè)轉載請聯系作者獲得授權,非商業(yè)轉載請注明出處 ? ? ? ?解釋器模式是一種行為型的軟件設計模式,定義了一個解釋器,來解釋給定語言和文法的句子。也可以理解為翻譯吧,比如1+1,翻譯為一加上一,等于二,這樣就

    2024年02月02日
    瀏覽(92)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包