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