Computer Science 433
Programming Languages

Fall 2014, The College of Saint Rose

Program/Problem Set 2: Syntax
Due: 11:59 PM, Monday, September 15, 2014

In this assignment, you will be completing some problems related to syntax, grammars, and parse trees.

You may work alone or with a partner on these problems. In order to earn full credit, you must show all of your work for these problems.

Textbook Problems

Question 1: Problem Set Exercise 12 on p. 164 of Sebesta. (2 points)

Question 2: Problem Set Exercise 13 on p. 164 of Sebesta. (4 points)

Question 3: Problem Set Exercise 14 on p. 164 of Sebesta. (4 points)

Question 4: Problem Set Exercise 20 on p. 165 of Sebesta. (5 points)

Reverse Polish Notation

Reverse Polish notation (RPN) is a common name for postfix mathematical expressions. Such notation lends itself to a stack-based evaluation and is used by the PostScript printer language and some old calculators. It has the advantage that it can specify any expression that can be specified in the usual (infix) notation without the need for parentheses to enforce order of operations.

If we are given an expression in RPN we would evaluate it as follows.

So for the expression

9 7 12 - *

we start with the empty stack. We then push 9, push 7, push 12, so our stack consists of [ 9 7 12 ]. We encounter the - operator, pop the 12 and the 7 from the stack, calculate 7 - 12 = -5 and push the result, giving a stack of [ 9 -5 ]. We then encounter the * operator, pop the -5 and 9 from the stack, calculate 5 * -9 = -45 and push the result, giving a stack of [ -45 ]. Now there are no more tokens on the input, so the value at the top of the stack contains our result, -45.

Question 5: Evaluate the following RPN expressions or state that it is an invalid RPN expression and why. Assume integer division rules apply where appropriate. (1/2 point each)

5 8 19 + *
2 3 + 5 7 * /
7 * 12 + 9 / 3
23
2 3 + 5 7 * / 3 4 + * 1 -
9 9 * 8 7 * * 5 5 * * 4 -

Question 6: Convert the following infix expressions into their RPN equivalents. (1/2 point each)

5 - 3 * 2 + 7
10 * 3 * 9 / 4
(5 + 8) / (9 -3)
5 + 8 / 9 - 3

Question 7: Use BNF to write a grammar for reverse Polish notation that includes the +, -, *, and / operators. (8 points)

Question 8: Using your grammar from the previous question, draw a parse tree for the RPN expression (4 points)

3 4 + 9 3 - 4 * *

A Grammar for BASIC

Considered this grammar for a subset of the BASIC language.

   <program> => <lines>
     <lines> => <line> | <line> <lines>
      <line> => <line-number> <stmt> \n
<line-number> => integer-literal
      <stmt> => REM string-literal
              | PRINT <print-expr>
              | INPUT <variable>
              | LET <assignment>
              | END
  <variable> => <integer-var> | <string-var>
<integer-var> => integer-variable-name
 <string-var> => integer-variable-name$
 <print-expr> => "string-literal" | <variable>
 <assignment> => <integer-var> = integer-literal
              | <string-var> = "string-literal"

Question 9: (5 points) Construct a leftmost derivation and corresponding parse tree for the program:

10 REM THIS IS FUN!
20 LET X = 8
30 PRINT X

Three types of BASIC statements that are not included are the IF/THEN construct, the standard GOTO statement, and the IF/GOTO construct

An IF/THEN looks like this:

30 IF X>5 THEN LET X = 5

A GOTO statement looks like this:

70 GOTO 10

An IF/GOTO statement looks like this:

100 IF Y<>Z GOTO 150

Question 10: Augment the BNF grammar above to include the BASIC IF/THEN construct, the GOTO statement, and the IF/GOTO construct. For simplicity, assume that the only conditions permitted for the boolean condition on the IF/THEN and IF/GOTO are numeric comparisons of integer variables and integer literals and that only the standard comparison operators are supported (= for equality, <, >, <=, >=, and <> for inequality). (8 points)

Submission

Before 11:59 PM, Monday, September 15, 2014, submit your work for grading. Create and submit a single archive file (a .7z or .zip file containing all required files) using Submission Box under assignment "PS2".

Grading

This assignment will be graded out of 45 points.

Problem

Value Score
Q1: Sebesta Exercise 12 2
Q2: Sebesta Exercise 13 4
Q3: Sebesta Exercise 14 4
Q4: Sebesta Exercise 20 5
Q5: RPN expression evaluations 3
Q6: Convert infix to RPN 2
Q7: BNF for RPN 8
Q8: Parse tree for RPN 4
Q9: Leftmost derivation/parse tree for BASIC program 5
Q10: Augmented BASIC BNF grammar 8
Total 45