Java

Java is CongoCC’s default target — -lang java is assumed when no language is given — and the most thoroughly exercised. Because the generated-API reference is written against the Java output, this chapter briefly notes Java-specific particulars.

Output layout

Generation produces a package directory tree: the parser and lexer in PARSER_PACKAGE, and the node classes in NODE_PACKAGE (by default <PARSER_PACKAGE>.ast). For PARSER_PACKAGE = "demo.lang" that is demo/lang/ with a demo/lang/ast/ subpackage. Point -d at your generated-sources root so the package path lands where javac expects it.

Using the parser

The Java API is the one documented in full in Generated API: construct FooParser from a CharSequence or Path, call the start production by its bare name, and get the tree from rootNode():

var parser = new FooParser(input);
parser.NumberList();
Node root = parser.rootNode();

Embedded code

Actions and INJECT blocks in the grammar are Java, inserted into the generated classes. This is the most direct of the four targets, since the tool itself is written in Java and node types are ordinary Java classes (Injected Code Across Languages).

Runtime

Generated parsers require Java 17 or later and use only the standard library. There is nothing else to add to the classpath.

Note

The old JDK_TARGET setting (and the -jdk flag) are gone — JDK_TARGET is accepted but has no effect, and -jdk is ignored. There is no per-version code-generation switch; generate modern Java and compile it with any JDK 17 or newer.