解析代数的正确AST

时间:2014-07-11 03:03:24

标签: java abstract-syntax-tree algebra

代表代数的正确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))(过于复杂,我知道,但它包含上面提到的所有内容)。

我真正的问题:这个术语的正确语法结构是什么,代数的核心和灵魂是什么?

0 个答案:

没有答案