2016-02-24 50 views

回答

2

我做的是增加了三個新運營商的方式: 「?」

  • 三元開如果
  • 「:」三元 - 否則
  • 三元封閉如果

只有前兩個將被直接讀取初始表達時創建。
但是,只有第三個將存在於輸出中(初始表達式的RPN)。
三元開放if如果放在操作符棧上,每當一個「?」被看到。
三元 - 其他從未放在堆棧上。相反,堆棧一直處於三態打開狀態,如果找到,則三元打開if用三元關閉if表示(因此表示我們處於條件運算符的其他部分)。
所有三個運算符的優先級都高於其他所有運算符(更高的含義是在其他運算符之後進行評估)。
三元-i運算符具有相同的優先級和右結合性(如在C中),這意味着三元-if將永遠不會導致另一個三元組的流行 - 如果。
三元 - 其他元素的優先級高於三元-ifs,它的關聯性是不相關的(因爲它從不放在堆棧上)。所以,遇到三元開放時 - 如果它會將其轉換爲前面提到的封閉的。
當遇到三元關閉 - 如果它會彈出它。

實例(三元封閉如果記爲 「:」):

  • 「一個B:C?」 - >
    「ABC:」
  • 「A B:? X Y:Z」 - >
    「abxyz?????:」
  • 「一個X Y:Z:b」 - >
    「爲axyz:b:」

這種方法od比實現更難以解釋,並且它對算法做出了輕微的改變,所以如果任何人有更簡單的解決方案,請發佈它。