作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在实现一个数学字符串表达式解析器,能够对标量和分数执行基本计算(+、-、*、/)。例如:计算“1/3*(4/10-12/10)”返回“-4/15”
在不依赖现有数学表达式或分数类的情况下,我相信有效的数学表达式可能是:
当传递一个字符串时,程序将决定是否可以将其分解为更小的表达式(复合表达式),或者如果是基本操作则对其进行计算。
换句话说,给定一个表达式,程序需要在运行时决定应使用什么类型的类。
理想的类/子类结构是什么?决定对象类型的代码应该驻留在哪里?在父类的构造函数中?在静态方法中?在抽象类中?
我目前正在使用 Java,但问题可能与语言无关。
最佳答案
这里似乎有一个层次结构。 Expression
似乎是您的基本引用,它可以由多个 ExpressionComponent
组成,作为一个 Scalar
、一个 Fraction
、一个 Operation
和一个 CompoundedExpression
。
如何解析这些内容由您自行决定,但是您的工厂(是的,您将使用工厂来生成此处任何内容的实例)将生成这些对象的具体实例以供使用。由于它们都是 ExpressionComponent
的基类型,因此您需要确保 Expression
的 API 允许您与多个 ExpressionComponent
交互以智能的方式。
关于Java 运行前未知的子类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46898678/
我是一名优秀的程序员,十分优秀!