12arithmetic expressions

683 views
607 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
683
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
18
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

12arithmetic expressions

  1. 1. Arithmetic Expressions ARITHMETIC EXPRESSIONS One of the most important applications of stacks is the evaluation of arithmetic expressions. Consider the simple arithmetic expression; A+B We have three possibilities for the positioning of the operator; 1. Before the operands as +AB which is called Prefix notation or Polish notation. (after the Polish logician Jan Lu Lukasiewicz) 2. Between the operands A+B which is called Infix notation . 3. After the operands AB+ which is called Postfix notation or Reverse Polish notation . How to convert à from infix to postfix à from infix to prefix Dr. Faruk Tokdemir, METU 1
  2. 2. Arithmetic Expressions General rules for conversion 1. Completely paranthesize the infix expression according to the order of precedence to specify the order of operation. 2. Move each operator to its corresponding àright (for postfix) àleft (for prefix) 3. Remove all parantheses Consider the arithmetic operators and their precedence as operators ^ priority highest *,/ ↓ +,- lowest Example A/B^C+D*E-A*C ß infix form; infix to postfix conversion A /B^C + D ∗ E – A ∗ C ß infix form ( ( A / ( B^C ) ) + ( D∗E ) – ( A∗C ) ( ( ( ( ABC^/ ) + ( DE∗ ) ) – ( AC∗ ) ) ) ( ( ( ABC^/DE∗ )+ ) – ( AC∗ ) ) ABC^/DE∗+AC∗ – ß postfix form Dr. Faruk Tokdemir, METU 2
  3. 3. Arithmetic Expressions Use the standard convention that when unparanthesied operators of the same precedence are scanned, the order from left to right, except in the case of exponentiation which is from right to left. A+B–C à(A+B)–C A / B ∗ C à (A / B) ∗ C A ^ B ^ C à A^( B ^ C ) convert infix to prefix A /B^C + D ∗ E – A ∗ C ß infix form ( ( ( A / (B^C) + ( D ∗ E ) ) – ( A ∗ C ) ) ( ( ( A / (^BC)) + ( ∗DE ) ) – ( ∗ AC ) ) ( ( /A^BC)) + (∗DE)) – (∗AC) ) ( + /A^BC∗DE) – (∗AC) ) –+/A^BC∗DE∗AC ß prefix form Advantage 1. The need for parantheses is eliminated 2. The precedence rule is no longer relevant 3. The expression is evaluated by making à left to right scan for postfix à right to left scan for prefix by the use of stacking. Dr. Faruk Tokdemir, METU 3
  4. 4. Arithmetic Expressions Example (B^2 – 4 ∗ A ∗ C )^(1/2) infix to postfix (B^2 – 4 ∗ A ∗ C )^(1/2) ( (B2^) – ((4A∗) ∗ C )^(12/) ( (B2^) – ((4A∗C∗) )^(12/) ( B2^4A∗C∗– )^(12/) ( B2^4A∗C∗–12/^) ß postfix notation infix to prefix ( B^2 – 4 ∗ A ∗ C )^(1/2) ( B^2) – (( 4 ∗ A) ∗ C ))^( 1/2) ( (^B2) – ( ( ∗ 4 A) ∗ C ))^(/12) ( (^B2) – (∗∗ 4 A C ))^(/12) ( (–^B2∗∗4AC ) )^(/12) (^–^B2∗∗4AC/12) ß prefix notation compilers use “postfix notation”. Dr. Faruk Tokdemir, METU 4
  5. 5. Arithmetic Expressions Algorithm to convert from infix to RPN (postfix) 1. Initialize an empty stack of operators 2. While no error and not to end of infix expression a. Get the next input token (const,variable,arithmetic operator, left paranthesis, right paranthesis) in the infix expression. b. If the token is i) A left paranthesis: Push it onto the stack ii) A right paranthesis: Pop and display stack element until a left paranthesis is encountered. But do not display the left parentheses. It is an error if the stack becomes empty with no left parentheses found. iii) An operator: If the stack is empty or input token has higher priority than the top stack, push onto the stack. Otherwise, pop and display the top stack element, then, repeat the comparison of input token with the new top stack item. Note: A left paranthesis in the stack is assumed to have lower priority than that of operators. iv) An operand: Just display it. 3. When end of infix expression is reached, pop and display stack items until the stack is empty. Dr. Faruk Tokdemir, METU 5
  6. 6. Arithmetic Expressions infix to postfix an array for infix expr. A+B∗C# an array for postfix expr. operator stack empty # (empty) +B ∗C# A # B ∗C# A #+ #+ ∗C# AB C# AB #+∗ ABC #+∗ ABC∗ #+ ABC∗+ # empty # (empty) ∗B +C# A # B +C# A If incoming operator (∗) has higher priority than top stack element (+) then, push it. # ∗ # A∗B+C# +C# AB # ∗ C# AB∗ # C# AB∗ #+ AB∗C #+ AB∗C+ pop and display until incoming operator (+) lower priority than stack top or empty. # # AB∗C+ Dr. Faruk Tokdemir, METU 6
  7. 7. Arithmetic Expressions Example: If the table of priorities Incoming priority 3 2 2 1 1 4 0 0 Symbol (operator) ^ ∗ / + – ( ) # Instack priority 3 2 2 1 1 0 ? 0 à Operators are taken out of stack as long as in stack priority is greater or equal to the incoming new operator priority. à Priority of ‘)’ is said to be undefined (?) because it is never pushed onto the stack. infix postfix operator stack A ∗ (B+C–D/E)/F# (empty) #(empty) ∗ (B+C–D/E)/F# A # (B+C–D/E)/F# A #∗ B+C–D/E)/F# A # ∗( +C–D/E)/F# AB # ∗( C–D/E)/F# AB # ∗(+ ABC # ∗(+ ABC+ # ∗( ABC+ # ∗(– /E)/F# ABC+D # ∗(– E)/F# ABC+D # ∗(–/ ABC+DE # ∗(–/ ABC+DE/ # ∗(– ABC+DE/– #∗ ABC+DE/– #∗ ABC+DE/– ∗ # F# ABC+DE/– ∗ #/ # ABC+DE/– ∗F #/ ABC+DE/– ∗F/ #(empty) –D/E)/F# D/E)/F# )/F# /F# –= + /= ∗ Dr. Faruk Tokdemir, METU 7
  8. 8. Arithmetic Expressions infix postfix (A+B) ∗ C # (empty) operator stack #(empty) A+B) ∗ C # (empty) #( +B) ∗ C # A #( B) ∗ C # A # (+ AB # (+ ∗C# AB+ #( C# AB+ #( # AB+ #(∗ AB+C #(∗ AB+C ∗ #(empty) )∗C# Pop and display until left paranthesis AB+C ∗ infix postfix A ∗ B + (C – D/E) # operator stack (empty) #(empty) ∗B + (C – D/E) # A # B + (C – D/E) # A #∗ AB # (C – D/E) # AB ∗ #+ C – D/E) # AB ∗ #+( – D/E) # AB ∗ C #+( D/E) # AB ∗ C #+(– /E) # AB ∗ CD #+(– E) # AB ∗ CD #+(–/ AB ∗ CDE #+(–/ # AB ∗ CDE/ #+(– # AB ∗ CDE/– #+ # AB ∗ CDE/–+ # + (C – D/E) # )# (+=∗) →pop AB ∗ CDE/–+ Operators in stack are in increasingly order! Dr. Faruk Tokdemir, METU 8
  9. 9. Arithmetic Expressions Evaluating postfix and prefix expressions Postfix 1. Scan the expression from left to right. 2. Each time an operator is encountered, apply it to the immediately preceding operands. 3. Replace the operands and the operator with the result. 4. Continue scanning to the right use stack for operand tokens and results. infix postfix 3+4 ∗ 5 345 ∗ + 45 ∗ + 5∗+ ∗+ + 3 4 3 5 4 3 pop 4 and 5 apply ∗ 4 ∗ 5 = 20 push the result 20 pop 3 and 20 apply + 3 3 + 5 = 23 push the result end of expression 23 Empty the stack. infix postfix (7+2) ∗3 72+3 ∗ 2+3 ∗ +3 ∗ 3∗ ∗ 7 2 7 pop 7 and 2 apply + 7+2 = 9 push it 9 3 9 pop 9 and 3 apply ∗ 9 ∗ 3 = 27 push end of expression 27 Empty it. Dr. Faruk Tokdemir, METU 9
  10. 10. Arithmetic Expressions Algorithm to evaluate postfix (RPN) expressions 1. Initialize an empty stack. 2. Repeat the following until the end of expression. a. Get the next token(const, variable, operator) in RPN expression. b. If the token is an operand, push it onto the stack. If it is an operand, then do the following i. Pop the top two values from the stack. If the stack does not contain two items, an error due to a malformed RPN expression has occured, and evaluation terminated. ii. Apply the operator to these two values. iii. Push the resulting value back onto the stack. 3. When the end of expression is encountered, its value is on top of the stack (and, in fact , must be the only value in the stack) Example: 24 ∗ 95+ – 24 ∗ 95+ – +– 4 ∗ 95+ – 5 9 8 – ∗ 95+ – 2 5+ – – 4 2 14 8 2 ∗ 4=8 95+ – 95+ – 9 + 5= 14 8 8 - 14= -6 8 9 8 -6 end of expression -6 is the result Dr. Faruk Tokdemir, METU 10
  11. 11. Arithmetic Expressions Evaluation of prefix expressions 1. Scan the expression from right to left. 2. Each time an operator is encountered, apply it to the two operands that immediately follow the operator. 3. Replace the operands and the operator with the result. 4. Continue scanning the expression to the left. Example: infix prefix infix prefix 3∗(2-6) ∗3-26 (5+3) ∗ (6-4) ∗+53-64 ∗3(-26) ∗+53(-64) ∗3(2-6) ∗+53(6-4) ∗3(-4) ∗+53(2) (-4) ∗3 ∗ (+53)(2) -12 result ∗ (5+3)(2) ∗ (8)(2) (8) ∗ (2) 16 result Dr. Faruk Tokdemir, METU 11

×