如何扩展中缀和堆栈优先级以包括运算符<
, >
, <=
, >=
, ==
, !=
, !
, &&
, 和||
?
在解析中缀表达式时,例如:P + (Q – F) / Y#
,每个符号都有一个与其操作顺序相关的优先级。/
并且*
具有比+
和更高的优先级-
。
以下是我拥有/理解的优先事项:
Priority * / + - ( ) #
Infix 2 2 1 1 3 0 0
Stack 2 2 1 1 0 n/a 0
如何扩展中缀和堆栈优先级以包括运算符<
, >
, <=
, >=
, ==
, !=
, !
, &&
, 和||
?
在解析中缀表达式时,例如:P + (Q – F) / Y#
,每个符号都有一个与其操作顺序相关的优先级。/
并且*
具有比+
和更高的优先级-
。
以下是我拥有/理解的优先事项:
Priority * / + - ( ) #
Infix 2 2 1 1 3 0 0
Stack 2 2 1 1 0 n/a 0
这取决于你想要什么优先级,对吧?除非您以特定语言询问优先级(如果是,请详细说明)。
无论如何,<、>、<= 和 >= 不适用于布尔值,== 和 != 适用于任何东西,而 !、&& 和 || 仅适用于布尔值。但是它们都返回布尔值,所以你想先应用那些不适用于布尔值的,然后应用那些可能适用于布尔值的,最后是那些只适用于布尔值的。至于最后一个,!优先于 && 和 ||。虽然没有必要,但我会让 && 优先于 ||,因为某些逻辑符号就是这样工作的。
所以优先级最终会是:
(
* /
+ -
< > <= >=
== !=
!
&&
||
) #