CUP is a system for generating LALR parsers from simple specifications. It serves the same role as
the widely used program YACC  and in fact offers most of the features of YACC. However, CUP is
written in Java, uses specifications including embedded Java code, and produces parsers which are
implemented in Java.