MiniJava is a subset of Java. The meaning of a MiniJava program is given by its meaning as a Java program. In a MiniJava class, each variable and method has a name which is different from all other names (of variables, methods, and formal parameters) which are declared in that class. Notice that two methods of a class may have formal parameters with the same name. The MiniJava statement System.out.println( ... ); can only print integers. You can generate a MiniJava tree builder as follows: jtb minijava.jj javacc jtb.out.jj javac Main.java You can now parse a MiniJava program in, say, Fac.java: java Main < Fac.java The program in Main.java can invoke visitors. For example, the current Main.java contains the call root.accept(new Visitor()); MicroJava is also a subset of Java, with the same restrictions as in MiniJava.