构建表达式树

时间:2010-11-08 06:52:40

标签: expression-trees

给定一个像4 * 5 + 9这样的表达式,我们如何构建一个表达式树呢? 我正在工作门户网站上阅读这个面试问题并想到尝试它。

问题是,如果将其括起来,那么构建

会更容易一些

例如((4 * 5)+ 9) 然后打开左括号,我们就知道我们必须向左走,其中数字将是叶节点,运算符将是父节点,一旦我们点击右括号,我们将返回并上升到该级别。

我们如何构建这样的表达式树?

1 个答案:

答案 0 :(得分:2)

您可以从BNF开始,然后继续前往树。 如果是带括号的简单表达式,那将是

 EXPR ::= TERM [ ('+'|'-') TERM ]
 TERM ::= MUL [ ('*'|'/') MUL ]
 MUL ::= NUMBER | '(' EXPR ')'
 NUMBER ::= DIGIT [ DIGIT ]
 DIGIT ::= '0' ... '9'

只需编写解析每个部分的函数(或使用boost :: spirit),你就会得到你的树