如维基百科所述,我正在研究调车场算法。
与运算符打交道时的算法描述如下:
如果令牌是运算符,则为o1,则:
而在运算符堆栈的顶部有一个运算符令牌o2,或者
o1 is left-associative and its precedence is less than or equal to that of o2, or o1 is right associative, and has precedence less than that of o2,
然后将o2从运算符堆栈中弹出,进入输出队列;
将o1推入操作员堆栈。
但是,他们给出了以下示例:
输入:
sin max 2 3 / 3 * 3.1415
当算法命中/
令牌时,对应该发生的情况的描述如下:
Token | Action | Output (in RPN) | Operator Stack
...
/ | Pop token to output | 2 3 max | / sin
...
它们如雨后春笋般冒出的功能标记max
关闭stack
,并投入了queue
。根据他们的算法,这似乎意味着功能令牌既是运算符,又比/
运算符的优先级低。
没有关于这种情况的解释。那么,对于Shunting-yard
算法而言,函数的优先级是什么?函数是右还是左关联?还是维基百科不完整/不准确?
sin( max( 2 3) / 3 * 3.1415)