CS230

Compiler Design


Project Assignment #3

Enhancement

  Enhance your compiler to scan and parse programs described by the grammar of Assignment #1 with the addition of the following productions:

<program>  →    program <id> (<identifier_list>) ;
                            <declarations>
                            <compound_statement>
                           .

<identifier_list>  →  <id>  ( , <id> ) *

<declarations>  →  var (<identifier_list> : <type> ; ) +

<type>  →   integer  |  boolean

<statement>   →   <variable> <assignop> <expression>
                              | <compound_statement>
                              | if <expression> then <statement> <else_clause>
                              | while <expression> do <statement>

<else_clause>  →  ( else <statement> )?

<expression>   →  <simple_expression>
                                | <simple_expression> <relop> <simple_expression>

<simple_expression>  →   <term> ( <addop> <term> ) *
                                            | <sign> <term>

<factor>  →   <id> |  (<expression>) |  <num>  |  not <factor>  |  true   |  false

<sign>  →  + | -

<relop>  →   =  |  <>  |  <  |  <=  |  >  |  >=

<mulop>  →   *  |  /  | moddivand

<addop>  →   + | -  |  or


Run your program on the following inputs:

(a)
program decisions (input, output);
var i, j : integer;
    variable : boolean;
begin
   if i > j then
    i := i + j
   else if variable then
    if i <= j then
     i := 0
    else
     j := 0
end.

(b)
program HasLoops (input, output);
var i, j : integer;
    NotDone : boolean ;
begin
   while (i < j) and NotDone do begin
    k := k  + 1;
    while  i = j  do  i := i + 2
   end
end.

(c) One of your own choosing.


Back to CS 230 Home Page