代表代数的正确abstract syntax tree是什么?我已经尝试了太多的设置,并且不断地重写语法树,并且我的所有配置最终都忘记了重要的事情(例如,分数不被支持)。目前,我对方程式和表达式的配置似乎很好。表达式只包含一系列术语,每个术语都带有正/负符号和系数。这就是麻烦的来源。究竟是一个术语?维基百科帮助了一些人,甚至还有example AST几个术语。然而,出于实际目的,我试图让所有内容更接近我们学习代数时使用的概念,而不是将其分解为变量和运算符。似乎任何东西都可以包含在一个术语中:术语可以包含分数(包含表达式),子项,子表达式和常规变量,每个都有自己的指数。
目前我的配置是这样的:
Term
|
-----------------------------------------------------------------
| | | | |
Coefficient ArrayList of ArrayList of ArrayList of ArrayList of
| sub-expressions powers of fractions powers of
| sub-expressions* (may contain fractions*
--------------- variables)
| |
integer/decimal fraction
(no variables)
*表达式/分数本身没有指数,但有时可能有一个指数(例如2(x+3)^3
)。
注意:为了简单起见,该图省略了变量的ArrayList(以及一个用于根的ArrayList),它们各自的指数的ArrayList,全部包含在该术语中。
注2:如果不清楚,图表不显示继承。它显示了Term类的成员。
这对我来说似乎相当草率,当事情变得更复杂时,可能无法很好地适应项目。 一个术语真的应该是这种汤吗?我有一种感觉还有其他的东西应该包括在术语中,但我想不出它会是什么。虽然我已经对这个问题持续了好几个月了,但是我没有采取这个规则来停止并且真的解决它,我应该在开始之前完成它。
我是否犯了一个错误,几乎所有东西都适合一个学期?如果是这样,我应该做什么呢?如果没有,它真的应该是这个......丑陋/不直观吗?我认为这一定是错误的部分原因在于,几乎没有人以这种方式考虑代数术语。
示例术语:2.3x(2/3)^4(√23)((x+6)/(x-6))
(过于复杂,我知道,但它包含上面提到的所有内容)。
我真正的问题:这个术语的正确语法结构是什么,代数的核心和灵魂是什么?