2014-01-13 30 views
0

我無法將轉換中綴表達式轉換爲後綴,因爲我無法正確放置括號。例如考慮:3+4*5/6如何將括號手動放入中綴表達式中?

從左到右我注意到具有更高優先級的'*'。因此,我提出:3+(4*5)/6

而且我觀察「/」這樣的:(3+(4*5))/6

但是,這是給我一個錯誤的定位後的表達。請在我的方法中指出錯誤,然後放上括號。

+2

是不是應該是3 +((4 * 5)/ 6)而不是(3+(4 * 5))/ 6? – adrin

+0

但是。把它轉換成這種形式的邏輯是什麼? –

+1

由於您未指定用於放置括號的方法(算法),因此不可能指出其中的錯誤。 (當然,*結果*顯然是不正確的,但你自己也很瞭解。) – user4815162342

回答

0

您需要解析不同的詞彙(詞法/語法分析)並生成一種抽象語法樹的形式。從這一點開始,您可以將表達式輸出到修復後符號。

例如,解析表達式由左到右,沒有任何前瞻:

  • 您解析3,該值存儲爲一個操作數
  • 您解析+,發現這是一個除了
  • 您解析4,將其作爲操作數存儲
  • 您解析了*,新運算符的優先級高於當前運算符(+),因此您必須將la第一步,創建一個新的上下文,併爲此新操作符的操作數添加4
  • 你解析5,其存儲爲一個操作數
  • 您解析/,具有相同的優先級新的運營商,應該只有在*所以你關閉當前上下文並創建一個新的englobing這一塊,這是執行用作第一個操作數。
  • 最後,您解析了第二個操作數6

最後,你從內環境中打開,把運營商,然後操作,插入括號並做相同的外部情境:

  • 4 5 *
  • 4 5 * 6 /
  • 4 5 * 6/3 +

或者用前綴記法:

  • * 4 5
  • / (* 4 5) 6
  • + (/ (* 4 5) 6) 3

在你的問題,你把括號整個前面的部分,而不是隻有以前的操作圍繞/操作。

+0

這是我在這裏做的,不是?你確實可以忽略不同的操作數,然後在編寫後綴表示法時再次讀取它們,但它需要兩次更長的解析。 – Geoffroy

+0

先生,我已刪除評論。我在你編輯答案之前就已經寫好了。 –

+0

先生,答案不應該是「3 4 5 * 6/+」嗎? –

相關問題