轉換過程中,我們使用堆疊來暫存運算符並按順序輸出操作數。這裡我們用 A∗(B+C)−D/EA*(B + C) - D / EA∗(B+C)−D/E 作為範例進行演示。
初始化:
讀取並處理每個字符:
| 步驟 | 輸入 | 堆疊 | 輸出 | 操作說明 |
|---|---|---|---|---|
| 1 | AAA | [] | AAA | 直接輸出操作數 AAA |
| 2 | ∗*∗ | [*] | AAA | 遇到運算符 ∗*∗,推入堆疊 |
| 3 | ((( | [*, (] | AAA | 遇到左括號,推入堆疊 |
| 4 | BBB | [*, (] | ABABAB | 直接輸出操作數 BBB |
| 5 | +++ | [*, (, +] | ABABAB | 遇到運算符 +++,推入堆疊 |
| 6 | CCC | [*, (, +] | ABCABCABC | 直接輸出操作數 CCC |
| 7 | ))) | [*] | ABC+ABC+ABC+ | 遇到右括號,彈出堆疊直到左括號,左括號丟棄 |
| 8 | −-− | [-] | ABC+∗ABC+*ABC+∗ | 遇到運算符 −-−,與堆疊頂運算符∗*∗ 比較優先級,∗*∗ 優先級較高,先彈出,再推入 −-− |
| 9 | DDD | [-] | ABC+∗DABC+*DABC+∗D | 直接輸出操作數 DDD |
| 10 | /// | [-, /] | ABC+∗DABC+*DABC+∗D | 遇到運算符 ///,推入堆疊 |
| 11 | EEE | [-, /] | ABC+∗DEABC+*DEABC+∗DE | 直接輸出操作數 EEE |
| 12 | [] | ABC+∗DE/−ABC+*DE/-ABC+∗DE/− |
輸入處理完畢,依次彈出堆疊並輸出
|