This is the JAVA implementation of the book EOPL with all exercises.
(1) Use a LL(1) lexer and LL(1) parser for the letlang
(2) Visitor pattern for both interpreter and type checker
(3) Finish almost all language features both in texts and exercises
(4) Type check until the module opaque type
TODO:
(1) Type inference
(2) implicit-refs && object-oriented language features && type checker
(3) Chapter 5 & 6 for continuation in Java