Interpreter 解譯器

Bear熊
2 min readApr 30, 2020

--

其實就是跟大學修的 Compiler 有異曲同工之妙的模式

當有一個語言需要解譯執行,並且你可將該語言中的句子表示微一個抽象語法樹時,可使用解譯器模式

書中用樂譜系統來舉例

架構長這樣

音符、音階、音速三個Class都繼承一個叫做 Expression的abstract class

abstract class Expression{
public void Interpreter(string){
//因為必定是一個英文(key) 緊跟著 一個 數字(value) 中間處理完之後執行 Execute
Execute(key,value)
}
public abstract void Execute(string key, string value);
}
class Note : Expression{
public override void Execute(string key, string value){
string note = "";
switch (key){
case "C"
note = "1";
break;
case "D"
note = "2";
break;...
}
Console.WriteLine("{0}",note);
}
//真正執行
string t = "O 2 E 0.5 G 0.5" //後略
while(t.length > 0){
Expression expression = null;
string str = t.Substring(0,1)
switch(str){
case "O"
expression = new Scale();//另外一個 expression我這邊沒寫
break;
case "C"
case "D"
...
case "B"
expression = new Note();
break;
}
expression.Interpreter(str); //總之再丟進去 這邊格式可能是錯的
}

我覺得這邊要有看一下Compiler 相關知識之後大概可以比較懂這種概念。

--

--