網站首頁 編程語言 正文
一、解釋器模式
解釋器模式,開發者自定義一種 “有內涵” 的語言(或者叫字符串),并設定相關的解釋規則,輸入該字符串后可以輸出公認的解釋,或者執行程序可以理解的動作。
優點:
- 可擴展性比較好,靈活。
- 增加了新的解釋表達式的方式。
- 易于實現簡單文法。
缺點:
- 可利用場景比較少。
- 對于復雜的文法比較難維護。
- 解釋器模式會引起類膨脹。
二、應用場景
- SQL 解析
- 符號處理引擎
三、代碼示例
實體角色:
- 終結符表達式:實現與文法中的元素相關聯的解釋操作,通常一個解釋器模式中只有一個終結符表達式,但有多個實例,對應不同的終結符。終結符一半是文法中的運算單元,比如有一個簡單的公式 R=R1+R2,在里面 R1 和 R2 就是終結符,對應的解析 R1 和 R2 的解釋器就是終結符表達式。
- 非終結符表達式:文法中的每條規則對應于一個非終結符表達式,非終結符表達式一般是文法中的運算符或者其他關鍵字,比如:公式 R=R1+R2 中,“+” 就是非終結符,解析 “+” 的解釋器就是一個非終結符表達式。非終結符表達式根據邏輯的復雜程度而增加,原則上每個文法規則都對應一個非終結符表達式。
import time import datetime """實現一段簡單的中文編程""" class Code: ? ? """自定義語言""" ? ? def __init__(self, text=None): ? ? ? ? self.text = text class InterpreterBase: ? ? """自定義解釋器基類""" ? ? def run(self, code): ? ? ? ? pass class Interpreter(InterpreterBase): ? ? """實現解釋器方法,實現終結符表達式字典""" ? ? def run(self, code): ? ? ? ? code = code.text ? ? ? ? code_dict = {'獲取當前時間戳': time.time(), "獲取當前日期": datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")} ? ? ? ? print(code_dict.get(code)) if __name__ == '__main__': ? ? test = Code() ? ? test.text = '獲取當前時間戳' ? ? data1 = Interpreter().run(test) ? ? test.text = '獲取當前日期' ? ? data2 = Interpreter().run(test)
原文鏈接:https://is-cloud.blog.csdn.net/article/details/122934489
相關推薦
- 2022-11-07 react使用websocket實時通信方式_React
- 2022-09-22 C語言自定義類型——枚舉,聯合體
- 2023-01-12 Python讀取mat(matlab數據文件)并實現畫圖_python
- 2022-09-06 關于react+antd樣式不生效問題的解決方式_React
- 2022-06-01 c++?深入理解歸并排序的用法_C 語言
- 2022-09-15 python安裝whl文件的實戰步驟_python
- 2022-12-15 Native?Memory?Tracking追蹤區域示例分析_React
- 2023-05-30 C++中map和set的使用詳細攻略_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支