CSE 6341 Project 1 skeleton code

interpreter/Interpreter.java

public class Interpreter {

   public static final int EXIT_SUCCESS = 0;

    public static final int EXIT_PARSING_ERROR = 1;

    public static final int EXIT_STATIC_CHECKING_ERROR = 2;

    public static void main(String[] args) {

        String filename = args[0];

        Program astRoot = null; // will refer to the AST root node after parsing

        // invoke the parser here

astRoot.print(System.out); // for debugging

// TODO: type checking - for example, by calling astRoot.check() }

    public static void fatalError(String message, int processReturnCode) { ... } }


ast/Program.java

public class Program extends ASTNode {

    public final UnitList unitList;

    public Program(UnitList ul) { ... } // constructor; used by the parser; do not modify

    public void print(PrintStream ps) { unitList.print(ps); } } // pretty printing of the program


ast/UnitList.java

public class UnitList extends ASTNode {

    public final Unit unit;

    public final UnitList unitList

    public UnitList(Unit u, UnitList ul) { ... } // constructor; used by the parser; do not modify

    public UnitList(Unit u) { ... } // constructor; used by the parser; do not modify

    public void print(PrintStream ps) { 

           unit.print(ps); ps.println();

      if (unitList != null) unitList.print(ps);  } }


ast/Unit.java

public abstract class Unit extends ASTNode { }

// subclasses of Unit: Decl, Stmt (abstract)

// subclasses of Stmt: AssignStmt, PrintStmt


ast/Decl.java

public class Decl extends Unit {

    public final VarDecl varDecl;

    public final Expr expr; ... }