1

我有那个表情

ratecode in ('EURV','EURA','EURB','EURO','CHUPin*+-da~') && ( sourcecode ~in ('FMFC','FM') || block == 'yes')

现在这是 rpn 规则

    /// 2.  Repeat until we reach end of infix expression 
    ///     I.  Get token (operand or operator); skip white spaces 
    ///     II. If token is: 
    ///         a.  Left parenthesis: Push it into stack 
    ///         b.  Right parenthesis: Keep popping from the stack and appending to 
    ///             RPN string until we reach the left parenthesis.
    ///             If stack becomes empty and we didn't reach the left parenthesis 
    ///             then break out with error "Unbalanced parenthesis" 
    ///         c.  Operator: If stack is empty or operator has a higher precedence than 
    ///             the top of the stack then push operator into stack. 
    ///             Else if operator has lower precedence then we keep popping and 
    ///             appending to RPN string, this is repeated until operator in stack 
    ///             has lower precedence than the current operator. 
    ///         d.  An operand: we simply append it to RPN string. 
    ///     III.    When the infix expression is finished, we start popping off the stack and 
    ///             appending to RPN string till stack becomes empty. 

我添加了 &&, ||, ~, in,

现在,它应该如何改变 RPN 的规则?

***更新

那是我的运算符表

Operator Priority
"+"      0
"-"      0
"&&"     0
"||"     0 

"/"      1
"*"      1
"=="     1
"("      1

"~"      3
"in"     3
")"      3
4

1 回答 1

2

这些额外的运营商的规则不会改变。您只需为每个运算符分配正确的优先级。例如,&&通常具有比大多数其他运算符低的优先级,并且||具有比 . 低的优先级&&

于 2011-08-24T16:21:06.143 回答