Java递归数学表达式评估

我分配给学校的一个问题确实让我感到困惑.基本上,在课堂上我们正在学习递归.作为家庭作业和相互递归的介绍,我们应该编写一个使用相互递归的数学表达式求值器. getExpressionValue,getTermValue和getFactorValue这三个方法需要相互调用才能获得结果.我们应该支持加,减,乘,除和带括号的表达式.在寻找有关如何执行此操作的想法时,我不断遇到递归下降解析,但是我不确定该想法是否适合此问题.

如果有人可以为我提供指导,或者可能提供指向解释如何进行此类解析的文章的链接,我将不胜感激.谢谢.

最佳答案
递归下降解析确实适用于此. The Wikipedia article on the subject在C中包含一个很好的示例,它与您想要执行的操作非常相似.

基本思想是这样的:如果您假定给定的文本是有效的表达式,则它必须以左括号或数字开头.因此,通过查看第一个字符,您可以知道它是否是带括号的表达式.如果不是,则文本必须是一个由一个或多个术语组成的序列,并用或-分隔.因此,您开始将文本开头视为术语.什么术语?它是由*或/分隔的一个或多个因子的序列.因此,您开始将文本开头视为一个因素.是什么因素?它可以是数字,也可以是带括号的表达式,通过查看第一个字符,可以确定它是什么.如果是数字,则消耗掉所有后续数字,以便找出数字.现在,试图找出因子值是什么的方法可以将此数字返回给试图找出项值是什么的方法.现在,此方法知道第一个数字是什么,它可以检查下一个字符以查看它是*还是/(编辑:它也可以是右括号,a或–,这意味着该术语由(只有一个数),然后要求提取下一个因子,依此类推.

转载注明原文:Java递归数学表达式评估 - 代码日志