RPN中运营商的优先级

ksh*_*ish 3 c algorithm data-structures

在C中计算后缀表达式时,如果我们的令牌是一个运算符,我们必须将它放在堆栈中,使其具有最高优先级.

我的问题是运营商之间*, /, %,具有最高优先级.

我们还需要考虑关联性吗?由于所有这些运营商都具有LEFT-TO-RIGHT 关联性,因此会/优先于*

lus*_*oog 8

优先级通常仅适用于中缀符号.Postfix(和Prefix)表示法通常被认为是明确指定哪些操作数与哪个运算符相关联.优先级仅在解析中存在歧义时才起作用,而在后缀表示法中则不是这种情况.

中缀表达式中出现的优先级问题

4 * 5 + 3 / 12
Run Code Online (Sandbox Code Playgroud)

转换为RPN表单后根本不存在

4 5 * 3 + 12 /
Run Code Online (Sandbox Code Playgroud)

或前缀形式

(/ (+ (* 4 5) 3) 12)
Run Code Online (Sandbox Code Playgroud)

.

在考虑诸如Shunting-Yard算法之类的东西时,存在一些混淆的可能性,该算法可用于从中间表达式生成RPN表示,或者直接评估中缀表达式.它通过将运算符推迟到辅助堆栈来处理运算符优先级,直到较低优先级运算符强制它被弹出和计算(或输出).