2015-01-08 42 views
0

我正在用C++評估postfix表達式。一切工作正常,但我沒有妥善管理=平等運營商。Postfix表達式中的相等運算符

導致中綴表達式的問題如下所示:A = 2 + B = 5其中A和B是變量。 我的程序將其轉換爲後綴爲:2 5 = B + = A

在我的程序我寫了if current element is an equal operator followed by a variable then move the result in that variable.這是不是這樣做,因爲解決上述的表達後,我的計劃給B = 5A = 7這似乎從表達錯誤的正確方法。

我應該遵循哪種技術來處理我的代碼的平等運算符?

+0

我假設通過「相等運算符」,您實際上是指「*賦值運算符」?然後,結果看起來與您的表達一致:您將'5'分配給'B',然後您將'B'加上'2'並將結果('7')分配給'A'。 –

+0

我同意約阿希姆。賦值運算符在它首先讀取表達式然後是受讓人(這是正確的)的意義上是相反的。也許這是什麼造成一些混亂,因爲我們習慣於直接分配x = 3 + 4. –

+0

你期望看到什麼結果? – kraskevich

回答

0

正如評論所說,你得到的答案是符合規則如果當前元素是一個相等的操作符後跟一個變量,然後將結果移動到該變量

然而,也有一些是在打破了後綴符號的均勻性的規則,所以我寧願建議改變該規則

如果當前元素是一個賦值操作符然後將第一個操作數(任何)到第二個操作數(變量)

爲了使此規則適用,您必須驗證最後一個標記(第二個操作數)是否爲變量。

我建議的規則與其他操作一致。例如,後綴符號3 4 +轉換爲3 + 4,因爲在您的掃描器讀取+時,它將採用最後兩個操作數34,並將它們相加:3 + 4。以3 4 + A =相同的方式,首先將3 + 4作爲第一個操作數,然後A作爲第二個操作,最後將第一個操作數移動到第二個A = 3 + 4。相反,您設計分配規則的方式很特殊,因爲它首先讀取運算符=,然後是第二個運算數A,這將起作用,但與其餘操作的方式不同。

+0

好吧我得到了你的規則,但是如果'A = B + 2 = 5'會發生什麼? –

+0

如果更改規則,則表達式「A = B + 2 = 5」將無效,因爲它是使用其他規則生成的。如果您採用我提出的使規則統一的建議,那麼現在必須在讀取'='之前強制存在兩個操作數,就像'*'需要2個參數一樣'3 *'是無效的。換句話說,「A B ='將變爲有效,」A = B「無效。 –