我需要实现一个简单的公式解析器。我要做的是首先创建一个postfix notation,然后创建evaluating the postfix string。不幸的是,该算法不允许使用括号,即(2 + 3)* a。任何人都知道如何扩展算法以允许括号?
提前致谢,
弗兰克
答案 0 :(得分:6)
后缀表示法的要点是消除中缀表示法中的括号,以便您可以更轻松地评估表达式。如果您当前的算法不允许在中缀表达式中使用括号,那么您使用的是错误的算法。
即使中缀版本有括号,shunting yard algorithm也允许您从中缀转换为后缀。
答案 1 :(得分:1)
答案 2 :(得分:0)
作为替代方案,算术表达式的语法非常简单,您可以轻松实现一个递归下降解析器,为您计算表达式。
语法看起来像这样:
<expression> ::= <term> <add_sub> <expression>
<term> ::= <factor> <mul_div> <term>
<factor> ::= '(' <expression> ')' | <number>
<add_sub> ::= '+' | '-'
<mul_div> ::= '*' | '/'
(你必须根据你的需要定义为整数,浮点值,分数等)
上面的语法处理括号和运算符优先级