代码之家  ›  专栏  ›  技术社区  ›  daydreamer

正在生成表达式树

  •  1
  • daydreamer  · 技术社区  · 14 年前

    给定一个4*5+9这样的表达式,我们如何用它构建表达式树呢?
    我在求职网站上读了这个面试问题,想试试看。

    问题是,如果用括号括起来的话,就不容易构建了。

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

    我们怎样才能建立这样的表达树呢?

    1 回复  |  直到 14 年前
        1
  •  2
  •   DennyRolling    14 年前

    你可以从 BNF 去树上工作。 如果是带括号的简单表达式,

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

    只需编写函数来解析每个部分(或使用boost::spirit),就可以得到树。