解釋器模式(interpreter), 最後一個模式了 最近比較苦b, 前同事內推某公司直接被拒, 理由學歷的問題, 現在立個flag, 1年之後進阿裡巴巴, 聽說阿裡巴巴沒有這個要求, 夢想還是要有的, 萬一實現了呢 解釋器模式(interpreter)定義 定義: 給定一個語言, 定義它的文法的 ...
最近比較苦b, 前同事內推某公司直接被拒, 理由學歷的問題, 現在立個flag, 1年之後進阿裡巴巴, 聽說阿裡巴巴沒有這個要求, 夢想還是要有的, 萬一實現了呢
解釋器模式(interpreter)定義
- 定義: 給定一個語言, 定義它的文法的一種表示, 並定義一個解釋器, 這個解釋器使用該表示來解釋語言中的句子
- 使用場景: 解釋器模式需要解決的是, 如果一種特定類型的問題發生的頻率足夠高, 那麼可能就值得將該問題的各個實例表述為一個簡單的語言中的句子. 這樣就可以構建一個解釋器. 該解釋器通過解釋這些句子來解決該問題
文法是啥?
- 文法也叫做語法, 指的是語言的結構方式. 包括詞的構成和變化, 片語和句子的組織.
- 也可以簡單的理解為一個語言的規則
上下文無關文法的組成
- 非總結符號集(表達式, 程式語句, 標識符號)
- 終結符號集(-,+,= 一些邏輯符號常量等)
- 產生式集合, 也可以稱為規則集合( id->a|b|...)
- 一個起始符號, 這個符號是非終結符號集的一個元素(compilationUnit編譯單元作為起始符號)
- 一個簡單的例子
- a->a+b->a-b->b
- b->0|1|2...|9
- 現在我們需要一個3-5+8的減加表達式
- 推到 a-> a+b-> a-b+b->b-b+b->3-b+b->3-5+b->3-5+8
- 這個文法的意思大概就是
- a = a+b ; a = a-b; a=b ; b只能是 1-9的數, 其中的+-作為終結符號, 1|...9作為產生集合, a為起始符號
uml講解
- 類圖中有四個角色, 抽象表達式, 終結表達式, 非終結表達式以及上下文
應用場景
- 日常工作中使用到解釋器的模式很少
- 正則算一個
- 敏感詞過濾看著也有點像