我無法將轉換中綴表達式轉換爲後綴,因爲我無法正確放置括號。例如考慮:3+4*5/6
如何將括號手動放入中綴表達式中?
從左到右我注意到具有更高優先級的'*'。因此,我提出:3+(4*5)/6
而且我觀察「/」這樣的:(3+(4*5))/6
但是,這是給我一個錯誤的定位後的表達。請在我的方法中指出錯誤,然後放上括號。
我無法將轉換中綴表達式轉換爲後綴,因爲我無法正確放置括號。例如考慮:3+4*5/6
如何將括號手動放入中綴表達式中?
從左到右我注意到具有更高優先級的'*'。因此,我提出:3+(4*5)/6
而且我觀察「/」這樣的:(3+(4*5))/6
但是,這是給我一個錯誤的定位後的表達。請在我的方法中指出錯誤,然後放上括號。
您需要解析不同的詞彙(詞法/語法分析)並生成一種抽象語法樹的形式。從這一點開始,您可以將表達式輸出到修復後符號。
例如,解析表達式由左到右,沒有任何前瞻:
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
在你的問題,你把括號整個前面的部分,而不是隻有以前的操作圍繞/
操作。
這是我在這裏做的,不是?你確實可以忽略不同的操作數,然後在編寫後綴表示法時再次讀取它們,但它需要兩次更長的解析。 – Geoffroy
先生,我已刪除評論。我在你編輯答案之前就已經寫好了。 –
先生,答案不應該是「3 4 5 * 6/+」嗎? –
是不是應該是3 +((4 * 5)/ 6)而不是(3+(4 * 5))/ 6? – adrin
但是。把它轉換成這種形式的邏輯是什麼? –
由於您未指定用於放置括號的方法(算法),因此不可能指出其中的錯誤。 (當然,*結果*顯然是不正確的,但你自己也很瞭解。) – user4815162342