目前正在开发一个小型的宠物项目,数学解析器/词法分析器,并最终为求解/学习而求解。我已经制定了一个基本的原型,现在正在将其转换为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!
我应该添加 - 上面的代码片段纯粹是为了演示问题。 –