逆波蘭式計算過程 疑問:求表達式a b*(c-d)-e/f的波蘭式和逆波蘭式?
疑問:求表達式a b*(c-d)-e/f的波蘭式和逆波蘭式?A*b*C→**ABC A*b*C*D→**,右端是堆棧頂部]讀入(,放入堆棧,堆棧中是(,輸出:(空)讀入a,直接輸出,堆棧是(,輸出:a
疑問:求表達式a b*(c-d)-e/f的波蘭式和逆波蘭式?
A*b*C→**ABC A*b*C*D→**,右端是堆棧頂部]讀入(,放入堆棧,堆棧中是(,輸出:(空)讀入a,直接輸出,堆棧是(,輸出:a,讀入,堆棧是(,輸出:a,讀入B,直接輸出,堆棧是(,輸出:AB,讀入),依次推出堆棧中的符號,直到遇到a([注意括號不是輸出],堆棧為空,輸出:AB,讀入*,堆棧為*,輸出:AB,讀入(,堆棧為*,輸出:AB,堆棧為*)讀?。ǎ湃攵褩?,堆棧為*(,輸出:AB,讀入C,直接輸出,堆棧為*(,輸出:AB,C,讀入-,放入堆棧,堆棧為*(-),輸出:AB,C,讀入D,直接輸出,堆棧為*(-,輸出:AB,CD,讀入)。依次推出堆棧中的符號,直到遇到a([注意括號不輸出]、堆棧為*(,輸出:AB,CD)-讀入*、放入堆棧、堆棧中為*(*)、輸出:AB CD讀入E、直接輸出、堆棧中為*(*)、輸出:AB CD-E讀入,[此時堆棧中*的優(yōu)先級高于堆棧中*的優(yōu)先級,所以*先取出,然后放在堆棧上],堆棧中是*(,輸出:ab CD-E*讀入F,直接輸出,堆棧中是*(,輸出:ab CD-E*F)讀入),依次推出堆棧中的符號,直到遇到一個為止([注意括號沒有輸出],堆棧是*,輸出:abcd-E*F此時,讀入完成,還有一個*在堆棧中,輸出:abcd-e*f*完成!以上是從中綴表達式到后綴表達式的全過程,并寫出了棧的變化。
什么是三元式,四元式,逆波蘭式?
1)三元表達式和語句表示為一組三元表達式。每個三元表達式由OP、arg1、2arg2組成,例如(OP、arg1、arg2)。例如:A:=b*cb*D(1)(*b,c)(2)(*b,D)(3)((1),(2))(4)(:=(3),A)2)四元數(shù)是更常見的中間碼形式。與三元數(shù)相比,四元數(shù)多了一個結(jié)果,如(OP,arg1,arg2,result)。OP和arg1之間有一個逗號。如果arg是默認值,請使用-occulation。例如:A:=b*C,b*D(1)(*,b,C,T1)(2)(*,b,D,T2)(3)(,T1,T2,T3)(4)(:=,T3,-,A)3)逆波蘭表達式是中間代碼表達式的最簡單形式。將操作對象寫在前面,操作符號寫在后面,例如a B寫為ab。實現(xiàn)方法:棧壓,碰到操作對象,棧壓,碰到操作符,在棧頂取兩個操作,然后棧壓。示例:a b*C->abc*(a b)*C->abc*