CUP stands for Construction of Useful Parsers and is an LALR parser generator for Java. It was developed by
C. Scott Ananian, Frank Flannery, Dan Wang,
Andrew W. Appel and Michael Petter. It implements
standard LALR(1) parser generation. As a parser author, you specify the symbols of Your grammar (terminal T1,T2; non terminal N1, N2;
), as well as the productions (LHS :== RHS1 | RHS2 ;
). If you provide each production alternative with action code ({: RESULT = myfunction(); :}
), the
parser will call this action code after performing a reduction with the particular production. You can use these callbacks to assemble an AST (Abstract Syntax Tree) or for arbitrary purposes. You should also have a look at the scanner generator JFlex, which is suited particularly well for collaboration with CUP.
CUP generates parsers from specifications, that you provide in a special file, whose syntax is quite similar to YACC: