【发布时间】:2011-01-04 01:31:43
【问题描述】:
在给定算术表达式的情况下,我需要一些帮助来创建自定义树。比如说,你输入这个算术表达式:
(5+2)*7
结果树应如下所示:
*
/ \
+ 7
/ \
5 2
我有一些自定义类来表示不同类型的节点,即 PlusOp、LeafInt 等。我不需要评估表达式,只需创建树,这样我以后就可以对其执行其他功能。 另外,否定运算符“-”只能有一个子,要表示“5-2”,必须输入为5 + (-2)。
需要对表达式进行一些验证,以确保每种类型的运算符都有正确的编号。对于参数/子项,每个左括号都伴随着一个右括号。
另外,我应该提一下我的朋友已经编写了将输入字符串转换为令牌堆栈的代码,如果这对此有所帮助的话。
如果有任何帮助,我将不胜感激。谢谢:)
(我读到您可以编写语法并使用 antlr/JavaCC 等来创建解析树,但我不熟悉这些工具或编写语法,所以如果这是您的解决方案,我会如果您能为他们提供一些有用的教程/链接,将不胜感激。)
【问题讨论】:
-
我应该补充一点,我也会对逻辑表达式(例如 ¬A V B)做类似的事情。
-
查看我关于如何构建递归下降解析器的 SO 答案,这对于表达式来说真的很容易。该答案链接到第二个,它显示了如何使用这样的解析器构建树。 stackoverflow.com/questions/2245962/…