Presentation is loading. Please wait.

Presentation is loading. Please wait.

PZ07A Programming Language design and Implementation -4th Edition Copyright©Prentice Hall, 2000 1 PZ07A - Expressions Programming Language Design and Implementation.

Similar presentations


Presentation on theme: "PZ07A Programming Language design and Implementation -4th Edition Copyright©Prentice Hall, 2000 1 PZ07A - Expressions Programming Language Design and Implementation."— Presentation transcript:

1 PZ07A Programming Language design and Implementation -4th Edition Copyright©Prentice Hall, 2000 1 PZ07A - Expressions Programming Language Design and Implementation (4th Edition) by T. Pratt and M. Zelkowitz Prentice Hall, 2001 Section 8.1-8.2

2 PZ07A Programming Language design and Implementation -4th Edition Copyright©Prentice Hall, 2000 2 Postfix Infix notation: Operator appears between operands: 2 + 3  5 3 + 6  9 Implied precedence: 2 + 3 * 4  2 + (3 * 4 ), not (2 + 3 ) * 4 Prefix notation: Operator precedes operands: + 2 3  5 + 2 * 3 5  (+ 2 ( * 3 5 ) )  + 2 15  17 Postfix notation: Operator follows operands: 2 3 +  5 2 3 * 5 +  (( 2 3 * 5 +)  6 5 +  11 Called Polish postfix since few could pronounce Polish mathematician Lukasiewicz, who invented it. An interesting, but unimportant mathematical curiosity when presented in 1920s. Only became important in 1950s when Burroughs rediscovered it for their ALGOL compiler.

3 PZ07A Programming Language design and Implementation -4th Edition Copyright©Prentice Hall, 2000 3 Prefix and Postfix In prefix notation, an operator preceeds its operands: + A B In postfix notation, an operator follows its operands: A B + In infix notation, an operator is between its operands: A + B Infix notation requires parentheses to indicates operator precedence: infix:A * (B + C) prefix:* A + B C postfix: A B C + * Prefix and postfix can handle operators with any fixed number of operands whereas infix works best for binary operators. You cannot use the same symbol for operators with different arity (numbers of operands). Most compilers evaluate expressions by turning infix into prefix or postfix. The expression is then evaluated with the help of a stack.

4 PZ07A Programming Language design and Implementation -4th Edition Copyright©Prentice Hall, 2000 4 Infix to Postfix Problem: Put infix expression with +, -, *, / into postfix for evaluation. Human method Completely parenthesize expression. Move each operator to its right parenthesis. Remove all parentheses. Example: A * B + C * DA * (B + C) * D Note: prefix and postfix representations are not unique.

5 PZ07A Programming Language design and Implementation -4th Edition Copyright©Prentice Hall, 2000 5 Infix to Postfix: Computer Method Computer method Given: input string broken up into tokens, and operator stack Define operator precedence: + - * / ( $ 2 2 3 3 0 0 Push $ on stack and add $ to end of input string as a delimiter. Get next token from input string and: 1.If token is an identifier, write to output string. 2.If token is "(", push on stack. 3.If token is ")", pop stack and write to output until "(" is popped. Discard both parentheses. 4.If token is operator x, and precedence(x) > precedence(tos), push x. 5.If token is operator x, and precedence(x) <= precedence(tos) while precedence(x) <= precedence(tos) pop stack and write to output string Push x on stack. 6.If token is "$", pop remaining operators from stack and output. Example: A * (B + C) A * B + C

6 PZ07A Programming Language design and Implementation -4th Edition Copyright©Prentice Hall, 2000 6 Evaluation of postfix 1. If argument is an operand, stack it. 2. If argument is an n-ary operator, then the n arguments are already on the stack. Pop the n arguments from the stack and replace by the value of the operator applied to the arguments. Ex: 2 3 4 + 5 * + “2 + (3+4)*5” // 37 Ex: (3 + 4) * 2 + 5

7 PZ07A Programming Language design and Implementation -4th Edition Copyright©Prentice Hall, 2000 7 Importance of Postfix to Compilers Code generation same as expression evaluation. To generate code for 2 3 4 + 5 * +, do: 1. 2 - stack L-value of 2 2. 3 - stack L-value of 3 3. 4 - stack L-value of 4 4. + - generate code to take R-value of top stack element (L-value of 4) and add to R-value of next stack element (L-value of 3) and place L-value of result on stack 5. 5 - stack L-value of 5 6. * - generate code to take R-value of top stack element (L-value of 5) and multiply to R-value of next stack element (L-value of 7) and place L-value of result on stack 7. + - generate code to take R-value of top stack element (L-value of 35) and add to R-value of next stack element (L-value of 2) and place L-value of result (37) on stack

8 PZ07A Programming Language design and Implementation -4th Edition Copyright©Prentice Hall, 2000 8 Forth - A language based on postfix Postfix source language leads to an efficient execution model, even though generally interpreted. System runs on two stacks - a subroutine return stack and an expression evaluation stack. Run-time model very small making it useful on small embedded computers. Forth was developed by Charles Moore around 1970. The name was a contraction of “Fourth Generation Programming Language” with the program name limited to five characters.

9 PZ07A Programming Language design and Implementation -4th Edition Copyright©Prentice Hall, 2000 9 Postscript Postscript is Forth with painting commands added. 1: %Same as Forth program 2: /Helvetica findfont 3: 20 scalefont 4: setfont 5: 200 400 moveto 6: /formatit {10 10 string cvrs show} def 7: /sqr {dup mul} def 8: /dosum {exch 1 add exch 1 index sqr add} def 9: 3 6 dosum 2 copy formatit ( ) show formatit 10: clear 11: 200 375 moveto 12: 0 0 0 1 9 {pop dosum} for formatit 13: showpage

10 PZ07A Programming Language design and Implementation -4th Edition Copyright©Prentice Hall, 2000 10 Postscript painting commands 14: % Lets draw a truck 15: /box {newpath 0 0 moveto 0 1 lineto 3 1 lineto 3 0 lineto 16: closepath} def 17:.1 setlinewidth 0 setgray 18: gsave 19: 72 72 scale 20: 2 5 translate box stroke 21: 3.2 0 translate.5.5 scale box fill 22: 0 1 translate.6.6 scale box fill 23: grestore 24: /tire {newpath 1 0 moveto 0 0 1 0 360 arc closepath} def 25:.5 setlinewidth 10 10 scale 26: 16 34 translate tire stroke 27: 3 0 translate tire stroke 28: 17 0 translate tire stroke 29: 3 0 translate tire stroke 30: 8 0 translate tire stroke 13: showpage

11 PZ07A Programming Language design and Implementation -4th Edition Copyright©Prentice Hall, 2000 11 Precedence of operators Assumed order of evaluation for arithmetic expressions: 2*3+4*5 assumed to be 26 since assumed ordering is (2*3)+(4*5). This is specified by precedence of operators. In any expression, the highest precedence operations are evaluated first, and so on. Most languages have an implied precedence. APL and Smalltalk do not. Neither language emphasizes arithmetic data, so it is not clear what precedence means in this case. C has 17 levels of precedence (given next)

12 PZ07A Programming Language design and Implementation -4th Edition Copyright©Prentice Hall, 2000 12 C precedence levels Precedence Operators Operator names 17 tokens, a[k], f()Literals, subscripting, function call.,-> Selection 16 ++, -- Postfix increment/decrement 15* ++, -- Prefix inc/dec , -, sizeof Unary operators, storage !,&,* Logical negation, indirection 14 typename Casts 13 *, /, % Multiplicative operators 12 +,- Additive operators 11 > Shift 10, = Relational 9 ==, != Equality 8 & Bitwise and 7  Bitwise xor 6 | Bitwise or 5 && Logical and 4 || Logical or 3 ?: Conditional 2 =, +=, -=, *=, Assignment /=, %=, >=, &=,  =, |= 1, Sequential evaluation


Download ppt "PZ07A Programming Language design and Implementation -4th Edition Copyright©Prentice Hall, 2000 1 PZ07A - Expressions Programming Language Design and Implementation."

Similar presentations


Ads by Google