Simple Java Subset, in Scheme Syntax Expressions remain in Scheme syntax, with primitive operations +, -, /, *, ==, !=, &&, ||, ?, <, >, <=, >= Also assignment operators =, *=, /=, +=, -= Literals: numbers, booleans (#T, #F), characters (#\...), string, NULL (symbol) No arrays, exceptions, threads, packages, explicit constructors, switch. Types are: number, char, boolean, for ClassOrInterfaceType is either a symbol or (DOT identifier ...) (CLASS . ) is a list of zero or more of PUBLIC PROTECTED PRIVATE STATIC ABSTRACT FINAL is either (EXTENDS ) or omitted is either (IMPLEMENTS ...) or omitted is one of (FIELD (...)) where is or (= ) (METHOD (...) ) where is ( ) (STATIC ) (INTERFACE . ) but the names in must be names of interfaces where is [syntactically a FieldDeclaration] or [syntactically a MethodHeader, i.e. a MethodDeclaration without the body] is a list of s includes: (VARIABLES ...) (IF ) (WHILE ) (DO ) (BLOCK ...) (LABEL ) (FOR ) includes: ( ) from list earlier literals THIS (NEW ...) (DOT ) (SUPER ) (CALL *) (CAST ) (INSTANCEOF ) ======================================== (JAVA-OBJECT (INSTANCEOF class) (FIELDS (name val)*)) Class is (JAVA-OBJECT (INSTANCEOF Object) (FIELDS (EXTENDS Class) (IMPLEMENTS Interface*) (STATIC-FIELDS (name type init?)*) (STATIC-METHODS Method*) (FIELDS (name type init?)*) (METHODS Method*))) Class Point is (JAVA-OBJECT (INSTANCEOF Class) (FIELDS (EXTENDS Object) (IMPLEMENTS) (STATIC-FIELDS) (STATIC-METHODS) (FIELDS (xcor Number) (ycor Number)) (METHODS (translate (JAVA-METHOD (ARGS byX byY) (BODY (xcor += byX) (ycor += byY) (return))))))) (JAVA-CLASS (EXTENDS class*) (IMPLEMENTS interface*) (STATIC-FIELDS