STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX
-
Upload
quentin-good -
Category
Documents
-
view
61 -
download
1
description
Transcript of STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX
![Page 1: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/1.jpg)
STACK APPLICATION 2
CONVERTING FROM INFIX TO POSTFIX
![Page 2: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/2.jpg)
INFIX NOTATION:
AN OPERATOR IS PLACED BETWEEN ITS OPERANDS
a + b
c – d + (e * f – g * h) / i
![Page 3: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/3.jpg)
OLD COMPILERS:
INFIX MACHINE LANGUAGE
THIS GETS MESSY BECAUSE OF PARENTHESES
NEWER COMPILERS:
INFIX POSTFIX MACHINE LANGUAGE
![Page 4: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/4.jpg)
IN POSTFIX NOTATION, AN OPERATOR IS PLACED
IMMEDIATELY AFTER ITS OPERANDS.
INFIX
POSTFIX
a + b
ab+
a + b * c
abc*+
a * b + c
ab*c+
(a + b) * c
ab+c*
PARENTHESES NOT NEEDED – AND NOT USED – IN POSTFIX
![Page 5: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/5.jpg)
LET’S CONVERT AN INFIX STRING TO A POSTFIX STRING. x – y * z
![Page 6: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/6.jpg)
POSTFIX PRESERVES THE ORDER OF OPERANDS, SO
AN OPERAND CAN BE APPENDED TO POSTFIX AS
SOON AS THAT OPERAND IS ENCOUNTERED IN INFIX.
![Page 7: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/7.jpg)
INFIX POSTFIX
x – y * z x
![Page 8: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/8.jpg)
INFIX POSTFIX
x – y * z x
THE OPERANDS FOR ‘-’ ARE NOT YET IN POSTFIX,
SO ‘-’ MUST BE TEMPORARILY SAVED SOMEWHERE.
![Page 9: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/9.jpg)
INFIX POSTFIX
x – y * z xy
![Page 10: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/10.jpg)
INFIX POSTFIX
x – y * z xy
THE OPERANDS FOR ‘*’ ARE NOT YET IN POSTFIX,
SO ‘*’ MUST BE TEMPORARILY SAVED SOMEWHERE,
AND RESTORED BEFORE ‘-’.
![Page 11: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/11.jpg)
INFIX POSTFIX
x – y * z xyz
![Page 12: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/12.jpg)
INFIX POSTFIX
x – y * z xyz* –
![Page 13: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/13.jpg)
SUPPOSE, INSTEAD, WE STARTED WITH x*y-z
AFTER MOVING x TO POSTFIX, * IS TEMPORARILY SAVED,
AND THEN y IS MOVED TO POSTFIX. WHAT HAPPENS WITH ‘-’?
INFIX POSTFIX
x * y – z xy
![Page 14: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/14.jpg)
THE ‘*’ MUST BE MOVED TO POSTFIX NOW, BECAUSE BOTH OF THE OPERANDS FOR ‘*’ ARE ON POSTFIX. THEN THE ‘-’ MUST BE SAVED TEMPORARILY. AFTER ‘z’ IS MOVED TO POSTFIX, ‘-’ IS MOVED TO POSTFIX, AND WE ARE DONE.
INFIX POSTFIX
x * y – z xy*z–
![Page 15: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/15.jpg)
THE TEMPORARY STORAGE FACILITY IS A STACK.
FOR EACH OPERATOR IN INFIX:
LOOP UNTIL OPERATOR PUSHED:
IF OPERATOR STACK IS EMPTY,
PUSH
ELSE IF INFIX OPERATOR HAS GREATER PRECEDENCE
THAN TOP OPERATOR ON STACK,
PUSH
ELSE
POP AND APPEND TO POSTFIX
![Page 16: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/16.jpg)
INFIX GREATER PUSH
![Page 17: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/17.jpg)
INFIX POSTFIX
a + b * c / d - e
![Page 18: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/18.jpg)
INFIX POSTFIX
a + b * c / d – e abc*d/+e –
-
/
*
+
OPERATOR STACK
![Page 19: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/19.jpg)
WHAT ABOUT PARENTHESES?
LEFT PARENTHESIS: PUSH, BUT WITH LOWESTPRECEDENCE
RIGHT PARENTHESIS: POP AND APPEND TOPOSTFIX UNTIL ‘(‘ POPPED;PITCH ‘(‘ AND PROCEED.
![Page 20: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/20.jpg)
CONVERT TO POSTFIX:
x * (y + z)
![Page 21: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/21.jpg)
INFIX POSTFIX x * (y + z) xyz+* + ( * OPERATOR STACK
![Page 22: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/22.jpg)
INFIX POSTFIXx * (y + z – (a / b + c) * d) / e
OPERATOR STACK
![Page 23: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/23.jpg)
TO DECIDE WHAT ACTION TO TAKE IN CONVERTING
FROM INFIX TO POSTFIX, ALL WE NEED TO KNOW IS
THE CURRENT CHARACTER IN INFIX AND THE TOP
CHARACTER ON OPERATOR STACK.
![Page 24: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/24.jpg)
Top character on operator stack
Action
Taken ( +, - *, / empty
Identifier
)
(
+, -
*, /
empty
Append to postfix
Append to postfix
Append to postfix
Append to postfix
Pop;pitch ‘(‘
Pop to postfix
Pop to postfix
Pop to postfix
Pop to postfix
Pop to postfix
Pop to postfix
Pop to postfix
Done
Error
Error
Push Push Push Push
Push Push
Push Push Push
InfIxCharacter
![Page 25: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/25.jpg)
EACH TOKEN HAS TWO PARTS:
A GENERIC PART, FOR THE CATEGORY OF THE TOKEN
A SPECIFIC PART, TO ACCESS THE CHARACTERS INTHE TOKEN
Token
A token is the smallest meaningful unit in a program.
![Page 26: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/26.jpg)
FOR EXAMPLE:
ADD_OP –
// index 35 in symbol table
add_op +
identifier 35
![Page 27: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/27.jpg)
INFIX-TO-POSTFIX APPLET
http://www.cs.lafayette.edu/~collinsw/infix/infix.html
![Page 28: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/28.jpg)
Infix to Postfix Applet
http://www.cs.lafayette.edu/~collinsw/infixapp/infix.html
![Page 29: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/29.jpg)
PREFIX NOTATION
AN OPERATOR IMMEDIATELY PRECEDES ITS OPERANDS
![Page 30: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/30.jpg)
INFIX PREFIXa + b +ab
a * (b + c) *a+bc
a * b + c +*abc
![Page 31: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/31.jpg)
TWO STACKS ARE USED:
OPERATOR STACK: SAME RULES AS BEFORE
OPERAND STACK: TO HOLD THE OPERANDS
WHENEVER opt IS POPPED FROM OPERATOR STACK, opd1 AND
THEN opd2 ARE POPPED FROM OPERAND STACK. THE STRING
opt + opd2 + opd1 IS PUSHED ONTO OPERAND STACK.
NOT opt + opd1 + opd2
![Page 32: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/32.jpg)
INFIXa + (b * c – d) / e
![Page 33: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/33.jpg)
INFIX PREFIXa + (b * c – d) / e +a/– *bcde
+a/– *bcde /– *bcde e –*bcd d / *bc – c * b (
a + OPERAND STACK OPERATOR STACK
![Page 34: STACK APPLICATION 2 CONVERTING FROM INFIX TO POSTFIX](https://reader036.fdocuments.us/reader036/viewer/2022081506/56812b2b550346895d8f39da/html5/thumbnails/34.jpg)
GROUP EXERCISE: CONVERT TO PREFIX
a – b + c * (d / e – (f + g))