Programming Assignment 3
CS 51530
Programming Languages, Interpreters and Compilers
Spring, 2020

This assignment makes use of the files contained in this zip file. This assignment is due Monday, February 24.

This assignment is based on Language_6. You will add one new type of expression to Language_6 to create Language_6a.

In the zip file there is a file Language_6a.txt that describes the syntax of Language_6a, which adds a for-loop expression to Language_6. Your assignment is to add code to the interpreter for Language_6 so that the new interpreter can handle the new expression.

The for-loop in Language_6a should have the same semantics as a for-loop in C++ or Java. In particular, be sure to notice the difference between (using C++/Java notation)

      for (int i = 1; i < 3; i =  i + 1)

and

      int i = 0;
      for (i = 1; i < 3; i = i + 1)

For the purpose of this assignment, the interpreter code is structured a bit differently than the interpreters we used in class. In this assignment, the file Language_6.java defines a class whose instances are interpreters for Language_6. Notice that the methods in Language_6.java are member methods, not static methods. To modify the Language_6 interpreter to create a Language_6a interpreter, you subclass Language_6.java and either override methods from Language_6.java or add new methods. The file Language_6a.java in the zip file is already set up to subclass Language_6.java. To implement the Language_6a interpreter, you need to define one new member method in Language_6a.java

Also in the zip file there is the file AST2infix_6a.java. As distributed, this file converts Language_6 into infix form. Modify this file so that it handles the new for-loop expression. The infix notation for a for-loop should be exactly like its C++/Java counterpart.

When you have finished implementing Language_6a.java and AST2infix_6a.java, include your version of PrettyPrinter2.java from Assignment 2 in the hw3 folder. Then the file Language_6a_Examples.java should compile and run. The output from running this program should look exactly like the file Language_6a_Examples_output.txt. Also, make sure that you didn't break anything from Language_6. The program Language_6_Examples.java from the zip file should also compile and run correctly and the program's output should look exactly like the file Language_6_Examples_output.txt.

To possibly help you with debugging, there is also in the zip file Language_6a_Examples_output_debug.txt which includes all of the environment debugging output. It's a lot of text, but you might find it useful to trace how the environments are supposed to work in Language_6a. You get the interpreter to produce all this output by setting

       DEBUG = 1;

in the file Language_6.java.

Turn in a zip file called CS51530Hw3Surname.zip (where Surname is your last name) containing your versions of Language_6a.java, AST2infix_6a.java, and PrettyPrinter2.java (just those three files). Be sure to put your name and email address in every file your turn in.

This assignment is due Monday, February 24.