目前正在開發一個小型的寵物項目,數學解析器/詞法分析器,並最終爲求解/學習而求解。我已經制定了一個基本的原型,現在正在將其轉換爲TypeScript來清理。對於那些感興趣的原型可以在這裏找到https://github.com/chips5k/math-solver-prototype。數學解析器/詞法分析器 - 令牌接口設計
我試圖想出一個乾淨的基於界面的方法來處理我的令牌。我懷疑我看錯了這個方式,但希望有人能提供有用的建議。
在我的TS設計中,我有幾個接口,基本接口是Token,NumericToken和FunctionToken擴展了這些接口。然後我有幾個類實現這些接口,如:AdditionToken,VariableToken,NumberToken,PiToken,SineToken等...
我的問題是,爲了使用這些接口我最終需要方法來檢查基本類型例如isNumeric,isFunction,isVariable或者直接類型=== TokenFactory.NUMERIC等等......對我來說,這感覺不對,因爲它基本上使使用接口變得無關緊要。我懷疑有更好的/更清潔的多態性方法,我可以採取,但不幸的是,我沒有想法,一直無法找到我在做什麼的信息。
的,事情土崩瓦解的一個例子說明自己試圖解決一系列的令牌時:
if(t.isFunction()) {
var a = stack.unshift();
var b = stack.unshift();
if(a.isNumeric() && b.isNumeric()){
result.push(tokenFactory.create(t.evaluate<number>(a.evaluate<number>, b.evaluate<number>));
} else {
//return to stack and move on, e.g can't solve x + 1 directly
}
} else {
stack.push(t);
}
基本上在尋找什麼被認爲是用於處理這樣的情況下理想的方法,我懷疑它可能成爲設計的替代方法。
TIA!
我應該添加 - 上面的代碼片段純粹是爲了演示問題。 –