001///////////////////////////////////////////////////////////////////////////////////////////////
002// checkstyle: Checks Java source code and other text files for adherence to a set of rules.
003// Copyright (C) 2001-2026 the original author or authors.
004//
005// This library is free software; you can redistribute it and/or
006// modify it under the terms of the GNU Lesser General Public
007// License as published by the Free Software Foundation; either
008// version 2.1 of the License, or (at your option) any later version.
009//
010// This library is distributed in the hope that it will be useful,
011// but WITHOUT ANY WARRANTY; without even the implied warranty of
012// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
013// Lesser General Public License for more details.
014//
015// You should have received a copy of the GNU Lesser General Public
016// License along with this library; if not, write to the Free Software
017// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
018///////////////////////////////////////////////////////////////////////////////////////////////
019
020package com.puppycrawl.tools.checkstyle.api;
021
022import com.puppycrawl.tools.checkstyle.grammar.java.JavaLanguageLexer;
023
024/**
025 * Contains the constants for all the tokens contained in the Abstract
026 * Syntax Tree.
027 *
028 * <p>Implementation detail: This class has been introduced to break
029 * the circular dependency between packages.</p>
030 *
031 * @noinspection ClassWithTooManyDependents
032 * @noinspectionreason ClassWithTooManyDependents - this class is a core part of our API
033 */
034public final class TokenTypes {
035
036    /**
037     * This is the root node for the source file.  It's children
038     * are an optional package definition, zero or more import statements,
039     * and zero or more type declarations.
040     *
041     * <p>For example:</p>
042     * <pre>
043     * import java.util.List;
044     *
045     * class MyClass{}
046     * interface MyInterface{}
047     * ;
048     * </pre>
049     *
050     * <p>parses as:</p>
051     *
052     * <pre>
053     * COMPILATION_UNIT -&gt; COMPILATION_UNIT
054     * |--IMPORT -&gt; import
055     * |   |--DOT -&gt; .
056     * |   |   |--DOT -&gt; .
057     * |   |   |   |--IDENT -&gt; java
058     * |   |   |   `--IDENT -&gt; util
059     * |   |   `--IDENT -&gt; List
060     * |   `--SEMI -&gt; ;
061     * |--CLASS_DEF -&gt; CLASS_DEF
062     * |   |--MODIFIERS -&gt; MODIFIERS
063     * |   |--LITERAL_CLASS -&gt; class
064     * |   |--IDENT -&gt; MyClass
065     * |   `--OBJBLOCK -&gt; OBJBLOCK
066     * |       |--LCURLY -&gt; {
067     * |       `--RCURLY -&gt; }
068     * |--INTERFACE_DEF -&gt; INTERFACE_DEF
069     * |   |--MODIFIERS -&gt; MODIFIERS
070     * |   |--LITERAL_INTERFACE -&gt; interface
071     * |   |--IDENT -&gt; MyInterface
072     * |   `--OBJBLOCK -&gt; OBJBLOCK
073     * |       |--LCURLY -&gt; {
074     * |       `--RCURLY -&gt; }
075     * `--SEMI -&gt; ;
076     * </pre>
077     *
078     * @see #PACKAGE_DEF
079     * @see #IMPORT
080     * @see #CLASS_DEF
081     * @see #INTERFACE_DEF
082     * @see #RECORD_DEF
083     * @see #ANNOTATION_DEF
084     * @see #ENUM_DEF
085     **/
086    public static final int COMPILATION_UNIT = JavaLanguageLexer.COMPILATION_UNIT;
087    /**
088     * Modifiers for type, method, and field declarations.  The
089     * modifiers element is always present even though it may have no
090     * children.
091     *
092     * <p>For example:</p>
093     * <pre>
094     * public int x;
095     * </pre>
096     *
097     * <p>parses as:</p>
098     * <pre>
099     * VARIABLE_DEF -&gt; VARIABLE_DEF
100     *  |--MODIFIERS -&gt; MODIFIERS
101     *  |   `--LITERAL_PUBLIC -&gt; public
102     *  |--TYPE -&gt; TYPE
103     *  |   `--LITERAL_INT -&gt; int
104     *  |--IDENT -&gt; x
105     *  `--SEMI -&gt; ;
106     * </pre>
107     *
108     * @see <a
109     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html">Java
110     *     Language Specification, &sect;8</a>
111     * @see #LITERAL_PUBLIC
112     * @see #LITERAL_PROTECTED
113     * @see #LITERAL_PRIVATE
114     * @see #ABSTRACT
115     * @see #LITERAL_STATIC
116     * @see #FINAL
117     * @see #LITERAL_TRANSIENT
118     * @see #LITERAL_VOLATILE
119     * @see #LITERAL_SYNCHRONIZED
120     * @see #LITERAL_NATIVE
121     * @see #STRICTFP
122     * @see #ANNOTATION
123     * @see #LITERAL_DEFAULT
124     **/
125    public static final int MODIFIERS = JavaLanguageLexer.MODIFIERS;
126
127    /**
128     * An object block.  These are children of class, interface, enum,
129     * annotation and enum constant declarations.
130     * Also, object blocks are children of the new keyword when defining
131     * anonymous inner types.
132     *
133     * <p>For example:</p>
134     * <pre>
135     * class Test {}
136     * </pre>
137     *
138     * <p>parses as:</p>
139     * <pre>
140     * CLASS_DEF -&gt; CLASS_DEF
141     * |--MODIFIERS -&gt; MODIFIERS
142     * |--LITERAL_CLASS -&gt; class
143     * |--IDENT -&gt; Test
144     * `--OBJBLOCK -&gt; OBJBLOCK
145     *     |--LCURLY -&gt; {
146     *     `--RCURLY -&gt; }
147     * </pre>
148     *
149     * @see #LCURLY
150     * @see #INSTANCE_INIT
151     * @see #STATIC_INIT
152     * @see #CLASS_DEF
153     * @see #CTOR_DEF
154     * @see #METHOD_DEF
155     * @see #VARIABLE_DEF
156     * @see #RCURLY
157     * @see #INTERFACE_DEF
158     * @see #LITERAL_NEW
159     * @see #ENUM_DEF
160     * @see #ENUM_CONSTANT_DEF
161     * @see #ANNOTATION_DEF
162     **/
163    public static final int OBJBLOCK = JavaLanguageLexer.OBJBLOCK;
164    /**
165     * A list of statements.
166     *
167     * <p>For example:</p>
168     * <pre>
169     * if (c == 1) {
170     *     c = 0;
171     * }
172     * </pre>
173     *
174     * <p>parses as:</p>
175     * <pre>
176     * LITERAL_IF -&gt; if
177     *  |--LPAREN -&gt; (
178     *  |--EXPR -&gt; EXPR
179     *  |   `--EQUAL -&gt; ==
180     *  |       |--IDENT -&gt; c
181     *  |       `--NUM_INT -&gt; 1
182     *  |--RPAREN -&gt; )
183     *  `--SLIST -&gt; {
184     *      |--EXPR -&gt; EXPR
185     *      |   `--ASSIGN -&gt; =
186     *      |       |--IDENT -&gt; c
187     *      |       `--NUM_INT -&gt; 0
188     *      |--SEMI -&gt; ;
189     *      `--RCURLY -&gt; }
190     * </pre>
191     *
192     * @see #RCURLY
193     * @see #EXPR
194     * @see #LABELED_STAT
195     * @see #LITERAL_THROWS
196     * @see #LITERAL_RETURN
197     * @see #SEMI
198     * @see #METHOD_DEF
199     * @see #CTOR_DEF
200     * @see #LITERAL_FOR
201     * @see #LITERAL_WHILE
202     * @see #LITERAL_IF
203     * @see #LITERAL_ELSE
204     * @see #CASE_GROUP
205     **/
206    public static final int SLIST = JavaLanguageLexer.SLIST;
207    /**
208     * A constructor declaration.
209     *
210     * <p>For example:</p>
211     * <pre>
212     * public SpecialEntry(int value, String text)
213     * {
214     *   this.value = value;
215     *   this.text = text;
216     * }
217     * </pre>
218     *
219     * <p>parses as:</p>
220     * <pre>
221     * CTOR_DEF -&gt; CTOR_DEF
222     *  |--MODIFIERS -&gt; MODIFIERS
223     *  |   `--LITERAL_PUBLIC -&gt; public
224     *  |--IDENT -&gt; SpecialEntry
225     *  |--LPAREN -&gt; (
226     *  |--PARAMETERS -&gt; PARAMETERS
227     *  |   |--PARAMETER_DEF -&gt; PARAMETER_DEF
228     *  |   |   |--MODIFIERS -&gt; MODIFIERS
229     *  |   |   |--TYPE -&gt; TYPE
230     *  |   |   |   `--LITERAL_INT -&gt; int
231     *  |   |   `--IDENT -&gt; value
232     *  |   |--COMMA -&gt; ,
233     *  |   `--PARAMETER_DEF -&gt; PARAMETER_DEF
234     *  |       |--MODIFIERS -&gt; MODIFIERS
235     *  |       |--TYPE -&gt; TYPE
236     *  |       |   `--IDENT -&gt; String
237     *  |       `--IDENT -&gt; text
238     *  |--RPAREN -&gt; )
239     *  `--SLIST -&gt; {
240     *      |--EXPR -&gt; EXPR
241     *      |   `--ASSIGN -&gt; =
242     *      |       |--DOT -&gt; .
243     *      |   |--LITERAL_THIS -&gt; this
244     *      |       |   `--IDENT -&gt; value
245     *      |       `--IDENT -&gt; value
246     *      |--SEMI -&gt; ;
247     *      |--EXPR -&gt; EXPR
248     *      |   `--ASSIGN -&gt; =
249     *      |       |--DOT -&gt; .
250     *      |       |   |--LITERAL_THIS -&gt; this
251     *      |       |   `--IDENT -&gt; text
252     *      |       `--IDENT -&gt; text
253     *      |--SEMI -&gt; ;
254     *      `--RCURLY -&gt; }
255     * </pre>
256     *
257     * @see #OBJBLOCK
258     * @see #CLASS_DEF
259     **/
260    public static final int CTOR_DEF = JavaLanguageLexer.CTOR_DEF;
261    /**
262     * A method declaration.  The children are modifiers, type parameters,
263     * return type, method name, parameter list, an optional throws list, and
264     * statement list.  The statement list is omitted if the method
265     * declaration appears in an interface declaration.  Method
266     * declarations may appear inside object blocks of class
267     * declarations, interface declarations, enum declarations,
268     * enum constant declarations or anonymous inner-class declarations.
269     *
270     * <p>For example:</p>
271     *
272     * <pre>
273     *  public static int square(int x)
274     *  {
275     *    return x*x;
276     *  }
277     * </pre>
278     *
279     * <p>parses as:</p>
280     *
281     * <pre>
282     * --METHOD_DEF -&gt; METHOD_DEF
283     *    |--MODIFIERS -&gt; MODIFIERS
284     *    |   |--LITERAL_PUBLIC -&gt; public
285     *    |   `--LITERAL_STATIC -&gt; static
286     *    |--TYPE -&gt; TYPE
287     *    |   `--LITERAL_INT -&gt; int
288     *    |--IDENT -&gt; square
289     *    |--LPAREN -&gt; (
290     *    |--PARAMETERS -&gt; PARAMETERS
291     *    |   `--PARAMETER_DEF -&gt; PARAMETER_DEF
292     *    |       |--MODIFIERS -&gt; MODIFIERS
293     *    |       |--TYPE -&gt; TYPE
294     *    |       |   `--LITERAL_INT -&gt; int
295     *    |       `--IDENT -&gt; x
296     *    |--RPAREN -&gt; )
297     *    `--SLIST -&gt; {
298     *        |--LITERAL_RETURN -&gt; return
299     *        |   |--EXPR -&gt; EXPR
300     *        |   |   `--STAR -&gt; *
301     *        |   |       |--IDENT -&gt; x
302     *        |   |       `--IDENT -&gt; x
303     *        |   `--SEMI -&gt; ;
304     *        `--RCURLY -&gt; }
305     * </pre>
306     *
307     * @see #MODIFIERS
308     * @see #TYPE_PARAMETERS
309     * @see #TYPE
310     * @see #IDENT
311     * @see #PARAMETERS
312     * @see #LITERAL_THROWS
313     * @see #SLIST
314     * @see #OBJBLOCK
315     **/
316    public static final int METHOD_DEF = JavaLanguageLexer.METHOD_DEF;
317
318    /**
319     * A field or local variable declaration.  The children are
320     * modifiers, type, the identifier name, and an optional
321     * assignment statement.
322     *
323     * <p>For example:</p>
324     * <pre>
325     * final double PI = 3.14;
326     * </pre>
327     *
328     * <p>parses as:</p>
329     * <pre>
330     * VARIABLE_DEF -&gt; VARIABLE_DEF
331     *  |--MODIFIERS -&gt; MODIFIERS
332     *  |   `--FINAL -&gt; final
333     *  |--TYPE -&gt; TYPE
334     *  |   `--LITERAL_DOUBLE -&gt; double
335     *  |--IDENT -&gt; PI
336     *  |--ASSIGN -&gt; =
337     *  |   `--EXPR -&gt; EXPR
338     *  |       `--NUM_FLOAT -&gt; 3.14
339     *  `--SEMI -&gt; ;
340     * </pre>
341     *
342     * @see #MODIFIERS
343     * @see #TYPE
344     * @see #IDENT
345     * @see #ASSIGN
346     **/
347    public static final int VARIABLE_DEF =
348        JavaLanguageLexer.VARIABLE_DEF;
349
350    /**
351     * An instance initializer.  Zero or more instance initializers
352     * may appear in class and enum definitions.  This token will be a child
353     * of the object block of the declaring type.
354     *
355     * <p>For example:</p>
356     * <pre>
357     * public class MyClass {
358     *     private int foo;
359     *     {foo = 10;}
360     * }
361     * </pre>
362     *
363     * <p>parses as:</p>
364     * <pre>
365     * CLASS_DEF -&gt; CLASS_DEF
366     *  |--MODIFIERS -&gt; MODIFIERS
367     *  |   `--LITERAL_PUBLIC -&gt; public
368     *  |--LITERAL_CLASS -&gt; class
369     *  |--IDENT -&gt; MyClass
370     *  `--OBJBLOCK -&gt; OBJBLOCK
371     *      |--LCURLY -&gt; {
372     *      |--VARIABLE_DEF -&gt; VARIABLE_DEF
373     *      |   |--MODIFIERS -&gt; MODIFIERS
374     *      |   |   `--LITERAL_PRIVATE -&gt; private
375     *      |   |--TYPE -&gt; TYPE
376     *      |   |   `--LITERAL_INT -&gt; int
377     *      |   |--IDENT -&gt; foo
378     *      |   `--SEMI -&gt; ;
379     *      |--INSTANCE_INIT -&gt; INSTANCE_INIT
380     *      |   `--SLIST -&gt; {
381     *      |       |--EXPR -&gt; EXPR
382     *      |       |   `--ASSIGN -&gt; =
383     *      |       |       |--IDENT -&gt; foo
384     *      |       |       `--NUM_INT -&gt; 10
385     *      |       |--SEMI -&gt; ;
386     *      |       `--RCURLY -&gt; }
387     *      `--RCURLY -&gt; }
388     * </pre>
389     *
390     * @see <a
391     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.6">Java
392     *     Language Specification&sect;8.6</a>
393     * @see #SLIST
394     * @see #OBJBLOCK
395     **/
396    public static final int INSTANCE_INIT =
397        JavaLanguageLexer.INSTANCE_INIT;
398
399    /**
400     * A static initialization block.  Zero or more static
401     * initializers may be children of the object block of a class
402     * or enum declaration (interfaces cannot have static initializers).  The
403     * first and only child is a statement list.
404     *
405     * <p>For Example:</p>
406     * <pre>
407     * static {
408     *   num = 10;
409     * }
410     * </pre>
411     *
412     * <p>parses as:</p>
413     * <pre>
414     * STATIC_INIT -&gt; STATIC_INIT
415     *  `--SLIST -&gt; {
416     *      |--EXPR -&gt; EXPR
417     *      |   `--ASSIGN -&gt; =
418     *      |       |--IDENT -&gt; num
419     *      |       `--NUM_INT -&gt; 10
420     *      |--SEMI -&gt; ;
421     *      `--RCURLY -&gt; }
422     * </pre>
423     *
424     * @see <a
425     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.7">Java
426     *     Language Specification, &sect;8.7</a>
427     * @see #SLIST
428     * @see #OBJBLOCK
429     **/
430    public static final int STATIC_INIT =
431        JavaLanguageLexer.STATIC_INIT;
432
433    /**
434     * A type.  This is either a return type of a method or a type of
435     * a variable or field.  The first child of this element is the
436     * actual type.  This may be a primitive type, an identifier, a
437     * dot which is the root of a fully qualified type, or an array of
438     * any of these. The second child may be type arguments to the type.
439     *
440     * <p>For example:</p>
441     * <pre>boolean var = true;</pre>
442     *
443     * <p>parses as:</p>
444     * <pre>
445     * |--VARIABLE_DEF -&gt; VARIABLE_DEF
446     * |   |--MODIFIERS -&gt; MODIFIERS
447     * |   |--TYPE -&gt; TYPE
448     * |   |   `--LITERAL_BOOLEAN -&gt; boolean
449     * |   |--IDENT -&gt; var
450     * |   `--ASSIGN -&gt; =
451     * |       `--EXPR -&gt; EXPR
452     * |           `--LITERAL_TRUE -&gt; true
453     * |--SEMI -&gt; ;
454     * </pre>
455     *
456     * @see #VARIABLE_DEF
457     * @see #METHOD_DEF
458     * @see #PARAMETER_DEF
459     * @see #IDENT
460     * @see #DOT
461     * @see #LITERAL_VOID
462     * @see #LITERAL_BOOLEAN
463     * @see #LITERAL_BYTE
464     * @see #LITERAL_CHAR
465     * @see #LITERAL_SHORT
466     * @see #LITERAL_INT
467     * @see #LITERAL_FLOAT
468     * @see #LITERAL_LONG
469     * @see #LITERAL_DOUBLE
470     * @see #ARRAY_DECLARATOR
471     * @see #TYPE_ARGUMENTS
472     **/
473    public static final int TYPE = JavaLanguageLexer.TYPE;
474    /**
475     * A class declaration.
476     *
477     * <p>For example:</p>
478     * <pre>
479     * public class Test {
480     * }
481     * </pre>
482     *
483     * <p>parses as:</p>
484     * <pre>
485     * CLASS_DEF -&gt; CLASS_DEF
486     * |--MODIFIERS -&gt; MODIFIERS
487     * |   `--LITERAL_PUBLIC -&gt; public
488     * |--LITERAL_CLASS -&gt; class
489     * |--IDENT -&gt; Test
490     * `--OBJBLOCK -&gt; OBJBLOCK
491     *     |--LCURLY -&gt; {
492     *     `--RCURLY -&gt; }
493     * </pre>
494     *
495     * @see <a
496     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html">Java
497     *     Language Specification, &sect;8</a>
498     * @see #MODIFIERS
499     * @see #IDENT
500     * @see #EXTENDS_CLAUSE
501     * @see #IMPLEMENTS_CLAUSE
502     * @see #OBJBLOCK
503     * @see #LITERAL_NEW
504     **/
505    public static final int CLASS_DEF = JavaLanguageLexer.CLASS_DEF;
506    /**
507     * An interface declaration.
508     *
509     * <p>For example:</p>
510     *
511     * <pre>
512     * public interface MyInterface {
513     *
514     * }
515     * </pre>
516     *
517     * <p>parses as:</p>
518     *
519     * <pre>
520     * INTERFACE_DEF -&gt; INTERFACE_DEF
521     * |--MODIFIERS -&gt; MODIFIERS
522     * |   `--LITERAL_PUBLIC -&gt; public
523     * |--LITERAL_INTERFACE -&gt; interface
524     * |--IDENT -&gt; MyInterface
525     * `--OBJBLOCK -&gt; OBJBLOCK
526     *     |--LCURLY -&gt; {
527     *     `--RCURLY -&gt; }
528     * </pre>
529     *
530     * @see <a
531     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-9.html">Java
532     *     Language Specification, &sect;9</a>
533     * @see #MODIFIERS
534     * @see #IDENT
535     * @see #EXTENDS_CLAUSE
536     * @see #OBJBLOCK
537     **/
538    public static final int INTERFACE_DEF =
539        JavaLanguageLexer.INTERFACE_DEF;
540
541    /**
542     * The package declaration.  This is optional, but if it is
543     * included, then there is only one package declaration per source
544     * file and it must be the first non-comment in the file. A package
545     * declaration may be annotated in which case the annotations comes
546     * before the rest of the declaration (and are the first children).
547     *
548     * <p>For example:</p>
549     *
550     * <pre>
551     *   package com.puppycrawl.tools.checkstyle.api;
552     * </pre>
553     *
554     * <p>parses as:</p>
555     *
556     * <pre>
557     * PACKAGE_DEF -&gt; package
558     * |--ANNOTATIONS -&gt; ANNOTATIONS
559     * |--DOT -&gt; .
560     * |   |--DOT -&gt; .
561     * |   |   |--DOT -&gt; .
562     * |   |   |   |--DOT -&gt; .
563     * |   |   |   |   |--IDENT -&gt; com
564     * |   |   |   |   `--IDENT -&gt; puppycrawl
565     * |   |   |   `--IDENT -&gt; tools
566     * |   |   `--IDENT -&gt; checkstyle
567     * |   `--IDENT -&gt; api
568     * `--SEMI -&gt; ;
569     * </pre>
570     *
571     * @see <a
572     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-7.html#jls-7.4">Java
573     *     Language Specification &sect;7.4</a>
574     * @see #DOT
575     * @see #IDENT
576     * @see #SEMI
577     * @see #ANNOTATIONS
578     * @see FullIdent
579     **/
580    public static final int PACKAGE_DEF = JavaLanguageLexer.PACKAGE_DEF;
581    /**
582     * An array declaration.
583     *
584     * <p>If the array declaration represents a type, then the type of
585     * the array elements is the first child.  Multidimensional arrays
586     * may be regarded as arrays of arrays.  In other words, the first
587     * child of the array declaration is another array
588     * declaration.</p>
589     *
590     * <p>For example:</p>
591     * <pre>
592     *   int[] x;
593     * </pre>
594     *
595     * <p>parses as:</p>
596     * <pre>
597     * VARIABLE_DEF -&gt; VARIABLE_DEF
598     *  |--MODIFIERS -&gt; MODIFIERS
599     *  |--TYPE -&gt; TYPE
600     *  |   |--LITERAL_INT -&gt; int
601     *  |   `--ARRAY_DECLARATOR -&gt; [
602     *  |       `--RBRACK -&gt; ]
603     *  |--IDENT -&gt; x
604     *  `--SEMI -&gt; ;
605     * </pre>
606     *
607     * <p>The array declaration may also represent an inline array
608     * definition.  In this case, the first child will be either an
609     * expression specifying the length of the array or an array
610     * initialization block.</p>
611     *
612     * @see <a
613     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-10.html">Java
614     *     Language Specification &sect;10</a>
615     * @see #TYPE
616     * @see #ARRAY_INIT
617     **/
618    public static final int ARRAY_DECLARATOR =
619        JavaLanguageLexer.ARRAY_DECLARATOR;
620
621    /**
622     * An extends clause.  This appears as part of class and interface
623     * definitions.  This element appears even if the
624     * {@code extends} keyword is not explicitly used.  The child
625     * is an optional identifier.
626     *
627     * <p>For example:</p>
628     * <pre>
629     * public class Test extends ArrayList {
630     * }
631     * </pre>
632     *
633     * <p>parses as:</p>
634     * <pre>
635     * CLASS_DEF -&gt; CLASS_DEF
636     * |--MODIFIERS -&gt; MODIFIERS
637     * |   `--LITERAL_PUBLIC -&gt; public
638     * |--LITERAL_CLASS -&gt; class
639     * |--IDENT -&gt; Test
640     * |--EXTENDS_CLAUSE -&gt; extends
641     * |   `--IDENT -&gt; ArrayList
642     * `--OBJBLOCK -&gt; OBJBLOCK
643     *     |--LCURLY -&gt; {
644     *     `--RCURLY -&gt; }
645     * </pre>
646     *
647     * @see #IDENT
648     * @see #DOT
649     * @see #CLASS_DEF
650     * @see #INTERFACE_DEF
651     * @see FullIdent
652     **/
653    public static final int EXTENDS_CLAUSE =
654        JavaLanguageLexer.EXTENDS_CLAUSE;
655
656    /**
657     * An implements clause.  This always appears in a class or enum
658     * declaration, even if there are no implemented interfaces.  The
659     * children are a comma separated list of zero or more
660     * identifiers.
661     *
662     * <p>For example:</p>
663     * <pre>
664     * public class MyClass implements Collection {
665     *
666     * }
667     * </pre>
668     *
669     * <p>parses as:</p>
670     * <pre>
671     * CLASS_DEF -&gt; CLASS_DEF
672     * |--MODIFIERS -&gt; MODIFIERS
673     * |   `--LITERAL_PUBLIC -&gt; public
674     * |--LITERAL_CLASS -&gt; class
675     * |--IDENT -&gt; MyClass
676     * |--IMPLEMENTS_CLAUSE -&gt; implements
677     * |   `--IDENT -&gt; Collection
678     * `--OBJBLOCK -&gt; OBJBLOCK
679     *     |--LCURLY -&gt; {
680     *     `--RCURLY -&gt; }
681     * </pre>
682     *
683     * @see #IDENT
684     * @see #DOT
685     * @see #COMMA
686     * @see #CLASS_DEF
687     * @see #ENUM_DEF
688     **/
689    public static final int IMPLEMENTS_CLAUSE =
690        JavaLanguageLexer.IMPLEMENTS_CLAUSE;
691
692    /**
693     * A list of parameters to a method or constructor.  The children
694     * are zero or more parameter declarations separated by commas.
695     *
696     * <p>For example</p>
697     * <pre>
698     * int start, int end
699     * </pre>
700     *
701     * <p>parses as:</p>
702     * <pre>
703     * PARAMETERS -&gt; PARAMETERS
704     *  |--PARAMETER_DEF -&gt; PARAMETER_DEF
705     *  |   |--MODIFIERS -&gt; MODIFIERS
706     *  |   |--TYPE -&gt; TYPE
707     *  |   |   `--LITERAL_INT -&gt; int
708     *  |   `--IDENT -&gt; start
709     *  |--COMMA -&gt; ,
710     *  `--PARAMETER_DEF -&gt; PARAMETER_DEF
711     *      |--MODIFIERS -&gt; MODIFIERS
712     *      |--TYPE -&gt; TYPE
713     *      |   `--LITERAL_INT -&gt; int
714     *      `--IDENT -&gt; end
715     * </pre>
716     *
717     * @see #PARAMETER_DEF
718     * @see #COMMA
719     * @see #METHOD_DEF
720     * @see #CTOR_DEF
721     **/
722    public static final int PARAMETERS = JavaLanguageLexer.PARAMETERS;
723    /**
724     * A parameter declaration. The last parameter in a list of parameters may
725     * be variable length (indicated by the ELLIPSIS child node immediately
726     * after the TYPE child).
727     *
728     * <p>For example</p>
729     * <pre>
730     *      void foo(SomeType SomeType.this, int firstParameter, int... secondParameter) {}
731     * </pre>
732     *
733     * <p>parses as:</p>
734     * <pre>
735     * METHOD_DEF -&gt; METHOD_DEF
736     *  |--MODIFIERS -&gt; MODIFIERS
737     *  |--TYPE -&gt; TYPE
738     *  |   `--LITERAL_VOID -&gt; void
739     *  |--IDENT -&gt; foo
740     *  |--LPAREN -&gt; (
741     *  |--PARAMETERS -&gt; PARAMETERS
742     *  |   |--PARAMETER_DEF -&gt; PARAMETER_DEF
743     *  |   |   |--MODIFIERS -&gt; MODIFIERS
744     *  |   |   |--TYPE -&gt; TYPE
745     *  |   |   |   `--IDENT -&gt; SomeType
746     *  |   |   `--DOT -&gt; .
747     *  |   |       |--IDENT -&gt; SomeType
748     *  |   |       `--LITERAL_THIS -&gt; this
749     *  |   |--COMMA -&gt; ,
750     *  |   |--PARAMETER_DEF -&gt; PARAMETER_DEF
751     *  |   |   |--MODIFIERS -&gt; MODIFIERS
752     *  |   |   |--TYPE -&gt; TYPE
753     *  |   |   |   `--LITERAL_INT -&gt; int
754     *  |   |   `--IDENT -&gt; firstParameter
755     *  |   |--COMMA -&gt; ,
756     *  |   `--PARAMETER_DEF -&gt; PARAMETER_DEF
757     *  |       |--MODIFIERS -&gt; MODIFIERS
758     *  |       |--TYPE -&gt; TYPE
759     *  |       |   `--LITERAL_INT -&gt; int
760     *  |       |--ELLIPSIS -&gt; ...
761     *  |       `--IDENT -&gt; secondParameter
762     *  |--RPAREN -&gt; )
763     *  `--SLIST -&gt; {
764     *      `--RCURLY -&gt; }
765     *
766     * </pre>
767     *
768     * @see #MODIFIERS
769     * @see #TYPE
770     * @see #IDENT
771     * @see #PARAMETERS
772     * @see #ELLIPSIS
773     **/
774    public static final int PARAMETER_DEF =
775        JavaLanguageLexer.PARAMETER_DEF;
776
777    /**
778     * A labeled statement.
779     *
780     * <p>For example:</p>
781     * <pre>
782     * outer:
783     * while (i &lt; 10) {
784     *     if (i == 5)
785     *         continue outer;
786     *     i++;
787     * }
788     * </pre>
789     *
790     * <p>parses as:</p>
791     * <pre>
792     * LABELED_STAT -&gt; :
793     *  |--IDENT -&gt; outer
794     *  `--LITERAL_WHILE -&gt; while
795     *      |--LPAREN -&gt; (
796     *      |--EXPR -&gt; EXPR
797     *      |   `--LT -&gt; &lt;
798     *      |       |--IDENT -&gt; i
799     *      |       `--NUM_INT -&gt; 10
800     *      |--RPAREN -&gt; )
801     *      `--SLIST -&gt; {
802     *          |--LITERAL_IF -&gt; if
803     *          |   |--LPAREN -&gt; (
804     *          |   |--EXPR -&gt; EXPR
805     *          |   |   `--EQUAL -&gt; ==
806     *          |   |       |--IDENT -&gt; i
807     *          |   |       `--NUM_INT -&gt; 5
808     *          |   |--RPAREN -&gt; )
809     *          |   `--LITERAL_CONTINUE -&gt; continue
810     *          |       |--IDENT -&gt; outer
811     *          |       `--SEMI -&gt; ;
812     *          |--EXPR -&gt; EXPR
813     *          |   `--POST_INC -&gt; ++
814     *          |       `--IDENT -&gt; i
815     *          |--SEMI -&gt; ;
816     *          `--RCURLY -&gt; }
817     * </pre>
818     *
819     * @see <a
820     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.7">Java
821     *     Language Specification, &sect;14.7</a>
822     * @see #SLIST
823     **/
824    public static final int LABELED_STAT =
825        JavaLanguageLexer.LABELED_STAT;
826
827    /**
828     * A type-cast.
829     *
830     * <p>For example:</p>
831     * <pre>
832     * (String)it.next()
833     * </pre>
834     *
835     * <p>parses as:</p>
836     * <pre>
837     * `--TYPECAST -&gt; (
838     *     |--TYPE -&gt; TYPE
839     *     |   `--IDENT -&gt; String
840     *     |--RPAREN -&gt; )
841     *     `--METHOD_CALL -&gt; (
842     *         |--DOT -&gt; .
843     *         |   |--IDENT -&gt; it
844     *         |   `--IDENT -&gt; next
845     *         |--ELIST -&gt; ELIST
846     *         `--RPAREN -&gt; )
847     * </pre>
848     *
849     * @see <a
850     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.16">Java
851     *     Language Specification, &sect;15.16</a>
852     * @see #EXPR
853     * @see #TYPE
854     * @see #TYPE_ARGUMENTS
855     * @see #RPAREN
856     **/
857    public static final int TYPECAST = JavaLanguageLexer.TYPECAST;
858    /**
859     * The array index operator.
860     *
861     * <p>For example:</p>
862     * <pre>
863     * arr[0] = 10;
864     * </pre>
865     *
866     * <p>parses as:</p>
867     * <pre>
868     * |--EXPR -&gt; EXPR
869     * |   `--ASSIGN -&gt; =
870     * |       |--INDEX_OP -&gt; [
871     * |       |   |--IDENT -&gt; arr
872     * |       |   |--EXPR -&gt; EXPR
873     * |       |   |   `--NUM_INT -&gt; 0
874     * |       |   `--RBRACK -&gt; ]
875     * |       `--NUM_INT -&gt; 10
876     * |--SEMI -&gt; ;
877     * </pre>
878     *
879     * @see #EXPR
880     **/
881    public static final int INDEX_OP = JavaLanguageLexer.INDEX_OP;
882    /**
883     * The {@code ++} (postfix increment) operator.
884     *
885     * <p>For example:</p>
886     * <pre>
887     * a++;
888     * </pre>
889     *
890     * <p>parses as:</p>
891     * <pre>
892     * |--EXPR -&gt; EXPR
893     * |   `--POST_INC -&gt; ++
894     * |       `--IDENT -&gt; a
895     * |--SEMI -&gt; ;
896     * </pre>
897     *
898     * @see <a
899     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.14.1">Java
900     *     Language Specification, &sect;15.14.1</a>
901     * @see #EXPR
902     * @see #INC
903     **/
904    public static final int POST_INC = JavaLanguageLexer.POST_INC;
905    /**
906     * The {@code --} (postfix decrement) operator.
907     *
908     * <p>For example:</p>
909     * <pre>
910     * a--;
911     * </pre>
912     *
913     * <p>parses as:</p>
914     * <pre>
915     * |--EXPR -&gt; EXPR
916     * |   `--POST_DEC -&gt; --
917     * |       `--IDENT -&gt; a
918     * |--SEMI -&gt; ;
919     * </pre>
920     *
921     * @see <a
922     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.14.2">Java
923     *     Language Specification, &sect;15.14.2</a>
924     * @see #EXPR
925     * @see #DEC
926     **/
927    public static final int POST_DEC = JavaLanguageLexer.POST_DEC;
928    /**
929     * A method call. A method call may have type arguments however these
930     * are attached to the appropriate node in the qualified method name.
931     *
932     * <p>For example:</p>
933     * <pre>
934     * Integer.parseInt("123");
935     * </pre>
936     *
937     * <p>parses as:</p>
938     * <pre>
939     * |--EXPR -&gt; EXPR
940     * |   `--METHOD_CALL -&gt; (
941     * |       |--DOT -&gt; .
942     * |       |   |--IDENT -&gt; Integer
943     * |       |   `--IDENT -&gt; parseInt
944     * |       |--ELIST -&gt; ELIST
945     * |       |   `--EXPR -&gt; EXPR
946     * |       |       `--STRING_LITERAL -&gt; "123"
947     * |       `--RPAREN -&gt; )
948     * |--SEMI -&gt; ;
949     * </pre>
950     *
951     *
952     * @see #IDENT
953     * @see #TYPE_ARGUMENTS
954     * @see #DOT
955     * @see #ELIST
956     * @see #RPAREN
957     * @see FullIdent
958     **/
959    public static final int METHOD_CALL = JavaLanguageLexer.METHOD_CALL;
960
961    /**
962     * A reference to a method or constructor without arguments. Part of Java 8 syntax.
963     * The token should be used for subscribing for double colon literal.
964     * {@link #DOUBLE_COLON} token does not appear in the tree.
965     *
966     * <p>For example:</p>
967     * <pre>
968     * Comparator&lt;String&gt; compare = String::compareToIgnoreCase;
969     * </pre>
970     *
971     * <p>parses as:
972     * <pre>
973     * |--VARIABLE_DEF -&gt; VARIABLE_DEF
974     * |   |--MODIFIERS -&gt; MODIFIERS
975     * |   |--TYPE -&gt; TYPE
976     * |   |   |--IDENT -&gt; Comparator
977     * |   |   `--TYPE_ARGUMENTS -&gt; TYPE_ARGUMENTS
978     * |   |       |--GENERIC_START -&gt; &lt;
979     * |   |       |--TYPE_ARGUMENT -&gt; TYPE_ARGUMENT
980     * |   |       |   `--IDENT -&gt; String
981     * |   |       `--GENERIC_END -&gt; &gt;
982     * |   |--IDENT -&gt; compare
983     * |   `--ASSIGN -&gt; =
984     * |       `--EXPR -&gt; EXPR
985     * |           `--METHOD_REF -&gt; ::
986     * |               |--IDENT -&gt; String
987     * |               `--IDENT -&gt; compareToIgnoreCase
988     * |--SEMI -&gt; ;
989     * </pre>
990     *
991     * @see #IDENT
992     * @see #DOUBLE_COLON
993     */
994    public static final int METHOD_REF = JavaLanguageLexer.METHOD_REF;
995    /**
996     * An expression.  Operators with lower precedence appear at a
997     * higher level in the tree than operators with higher precedence.
998     * Parentheses are siblings to the operator they enclose.
999     *
1000     * <p>For example:</p>
1001     * <pre>
1002     * int x = 4 + 2 * (5 % 3) + (1 &lt;&lt; 3) - 4 * 5;
1003     * </pre>
1004     *
1005     * <p>parses as:</p>
1006     * <pre>
1007     * |--VARIABLE_DEF -&gt; VARIABLE_DEF
1008     * |   |--MODIFIERS -&gt; MODIFIERS
1009     * |   |--TYPE -&gt; TYPE
1010     * |   |   `--LITERAL_INT -&gt; int
1011     * |   |--IDENT -&gt; x
1012     * |   `--ASSIGN -&gt; =
1013     * |       `--EXPR -&gt; EXPR
1014     * |           `--MINUS -&gt; -
1015     * |               |--PLUS -&gt; +
1016     * |               |   |--PLUS -&gt; +
1017     * |               |   |   |--NUM_INT -&gt; 4
1018     * |               |   |   `--STAR -&gt; *
1019     * |               |   |       |--NUM_INT -&gt; 2
1020     * |               |   |       |--LPAREN -&gt; (
1021     * |               |   |       |--MOD -&gt; %
1022     * |               |   |       |   |--NUM_INT -&gt; 5
1023     * |               |   |       |   `--NUM_INT -&gt; 3
1024     * |               |   |       `--RPAREN -&gt; )
1025     * |               |   |--LPAREN -&gt; (
1026     * |               |   |--SL -&gt; &lt;&lt;
1027     * |               |   |   |--NUM_INT -&gt; 1
1028     * |               |   |   `--NUM_INT -&gt; 3
1029     * |               |   `--RPAREN -&gt; )
1030     * |               `--STAR -&gt; *
1031     * |                   |--NUM_INT -&gt; 4
1032     * |                   `--NUM_INT -&gt; 5
1033     * |--SEMI -&gt; ;
1034     * </pre>
1035     *
1036     * @see #ELIST
1037     * @see #ASSIGN
1038     * @see #LPAREN
1039     * @see #RPAREN
1040     **/
1041    public static final int EXPR = JavaLanguageLexer.EXPR;
1042    /**
1043     * An array initialization.  This may occur as part of an array
1044     * declaration or inline with {@code new}.
1045     *
1046     * <p>For example:</p>
1047     * <pre>
1048     *   int[] y =
1049     *     {
1050     *       1,
1051     *       2,
1052     *     };
1053     * </pre>
1054     *
1055     * <p>parses as:</p>
1056     * <pre>
1057     * VARIABLE_DEF -&gt; VARIABLE_DEF
1058     *  |--MODIFIERS -&gt; MODIFIERS
1059     *  |--TYPE -&gt; TYPE
1060     *  |   |--LITERAL_INT -&gt; int
1061     *  |   `--ARRAY_DECLARATOR -&gt; [
1062     *  |       `--RBRACK -&gt; ]
1063     *  |--IDENT -&gt; y
1064     *  |--ASSIGN -&gt; =
1065     *  |   `--ARRAY_INIT -&gt; {
1066     *  |       |--EXPR -&gt; EXPR
1067     *  |       |   `--NUM_INT -&gt; 1
1068     *  |       |--COMMA -&gt; ,
1069     *  |       |--EXPR -&gt; EXPR
1070     *  |       |   `--NUM_INT -&gt; 2
1071     *  |       |--COMMA -&gt; ,
1072     *  |       `--RCURLY -&gt; }
1073     *  `--SEMI -&gt; ;
1074     * </pre>
1075     *
1076     * <p>Also consider:</p>
1077     * <pre>
1078     *   int[] z = new int[]
1079     *     {
1080     *       1,
1081     *       2,
1082     *     };
1083     * </pre>
1084     *
1085     * <p>which parses as:</p>
1086     * <pre>
1087     * VARIABLE_DEF -&gt; VARIABLE_DEF
1088     *  |--MODIFIERS -&gt; MODIFIERS
1089     *  |--TYPE -&gt; TYPE [2:4]
1090     *  |   |--LITERAL_INT -&gt; int
1091     *  |   `--ARRAY_DECLARATOR -&gt; [
1092     *  |       `--RBRACK -&gt; ]
1093     *  |--IDENT -&gt; z
1094     *  |--ASSIGN -&gt; =
1095     *  |   `--EXPR -&gt; EXPR
1096     *  |       `--LITERAL_NEW -&gt; new
1097     *  |           |--LITERAL_INT -&gt; int
1098     *  |           |--ARRAY_DECLARATOR -&gt; [
1099     *  |           |   `--RBRACK -&gt; ]
1100     *  |           `--ARRAY_INIT -&gt; {
1101     *  |               |--EXPR -&gt; EXPR
1102     *  |               |   `--NUM_INT -&gt; 1
1103     *  |               |--COMMA -&gt; ,
1104     *  |               |--EXPR -&gt; EXPR
1105     *  |               |   `--NUM_INT -&gt; 2
1106     *  |               |--COMMA -&gt; ,
1107     *  |               `--RCURLY -&gt; }
1108     *  `--SEMI -&gt; ;
1109     * </pre>
1110     *
1111     * @see #ARRAY_DECLARATOR
1112     * @see #TYPE
1113     * @see #LITERAL_NEW
1114     * @see #COMMA
1115     **/
1116    public static final int ARRAY_INIT = JavaLanguageLexer.ARRAY_INIT;
1117    /**
1118     * An import declaration.  Import declarations are option, but
1119     * must appear after the package declaration and before the first type
1120     * declaration.
1121     *
1122     * <p>For example:</p>
1123     *
1124     * <pre>
1125     *   import java.io.IOException;
1126     * </pre>
1127     *
1128     * <p>parses as:</p>
1129     *
1130     * <pre>
1131     * IMPORT -&gt; import
1132     * |--DOT -&gt; .
1133     * |   |--DOT -&gt; .
1134     * |   |   |--IDENT -&gt; java
1135     * |   |   `--IDENT -&gt; io
1136     * |   `--IDENT -&gt; IOException
1137     * `--SEMI -&gt; ;
1138     * </pre>
1139     *
1140     * @see <a
1141     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-7.html#jls-7.5">Java
1142     *     Language Specification &sect;7.5</a>
1143     * @see #DOT
1144     * @see #IDENT
1145     * @see #STAR
1146     * @see #SEMI
1147     * @see FullIdent
1148     **/
1149    public static final int IMPORT = JavaLanguageLexer.IMPORT;
1150    /**
1151     * The {@code -} (unary minus) operator.
1152     *
1153     * <p>For example:</p>
1154     * <pre>
1155     * a = -b;
1156     * </pre>
1157     *
1158     * <p>parses as:</p>
1159     * <pre>
1160     * |--EXPR -&gt; EXPR
1161     * |   `--ASSIGN -&gt; =
1162     * |       |--IDENT -&gt; a
1163     * |       `--UNARY_MINUS -&gt; -
1164     * |           `--IDENT -&gt; b
1165     * |--SEMI -&gt; ;
1166     * </pre>
1167     *
1168     * @see <a
1169     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.15.4">Java
1170     *     Language Specification, &sect;15.15.4</a>
1171     * @see #EXPR
1172     **/
1173    public static final int UNARY_MINUS = JavaLanguageLexer.UNARY_MINUS;
1174    /**
1175     * The {@code +} (unary plus) operator.
1176     *
1177     * <p>For example:</p>
1178     * <pre>
1179     * a = + b;
1180     * </pre>
1181     *
1182     * <p>parses as:</p>
1183     * <pre>
1184     * |--EXPR -&gt; EXPR
1185     * |   `--ASSIGN -&gt; =
1186     * |       |--IDENT -&gt; a
1187     * |       `--UNARY_PLUS -&gt; +
1188     * |           `--IDENT -&gt; b
1189     * |--SEMI -&gt; ;
1190     * </pre>
1191     *
1192     * @see <a
1193     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.15.3">Java
1194     *     Language Specification, &sect;15.15.3</a>
1195     * @see #EXPR
1196     **/
1197    public static final int UNARY_PLUS = JavaLanguageLexer.UNARY_PLUS;
1198    /**
1199     * A group of case clauses.  Case clauses with no associated
1200     * statements are grouped together into a case group.  The last
1201     * child is a statement list containing the statements to execute
1202     * upon a match.
1203     *
1204     * <p>For example:</p>
1205     * <pre>
1206     * case 0:
1207     * case 1:
1208     * case 2:
1209     *   x = 3;
1210     *   break;
1211     * </pre>
1212     *
1213     * <p>parses as:</p>
1214     * <pre>
1215     * CASE_GROUP -&gt; CASE_GROUP
1216     *  |--LITERAL_CASE -&gt; case
1217     *  |   |--EXPR -&gt; EXPR
1218     *  |   |   `--NUM_INT -&gt; 0
1219     *  |   `--COLON -&gt; :
1220     *  |--LITERAL_CASE -&gt; case
1221     *  |   |--EXPR -&gt; EXPR
1222     *  |   |   `--NUM_INT -&gt; 1
1223     *  |   `--COLON -&gt; :
1224     *  |--LITERAL_CASE -&gt; case
1225     *  |   |--EXPR -&gt; EXPR
1226     *  |   |   `--NUM_INT -&gt; 2
1227     *  |   `--COLON -&gt; :
1228     *  `--SLIST -&gt; SLIST
1229     *      |--EXPR -&gt; EXPR
1230     *      |   `--ASSIGN -&gt; =
1231     *      |       |--IDENT -&gt; x
1232     *      |       `--NUM_INT -&gt; 3
1233     *      |--SEMI -&gt; ;
1234     *      `--LITERAL_BREAK -&gt; break
1235     *          `--SEMI -&gt; ;
1236     * </pre>
1237     *
1238     * @see #LITERAL_CASE
1239     * @see #LITERAL_DEFAULT
1240     * @see #LITERAL_SWITCH
1241     * @see #LITERAL_YIELD
1242     **/
1243    public static final int CASE_GROUP = JavaLanguageLexer.CASE_GROUP;
1244    /**
1245     * An expression list.  The children are a comma separated list of
1246     * expressions.
1247     *
1248     * <p>For example:</p>
1249     * <pre>
1250     * new ArrayList(50);
1251     * </pre>
1252     *
1253     * <p>parses as:</p>
1254     * <pre>
1255     * |--EXPR -&gt; EXPR
1256     * |   `--LITERAL_NEW -&gt; new
1257     * |       |--IDENT -&gt; ArrayList
1258     * |       |--TYPE_ARGUMENTS -&gt; TYPE_ARGUMENTS
1259     * |       |   |--GENERIC_START -&gt; &lt;
1260     * |       |   `--GENERIC_END -&gt; &gt;
1261     * |       |--LPAREN -&gt; (
1262     * |       |--ELIST -&gt; ELIST
1263     * |       |   `--EXPR -&gt; EXPR
1264     * |       |       `--NUM_INT -&gt; 50
1265     * |       `--RPAREN -&gt; )
1266     * |--SEMI -&gt; ;
1267     * </pre>
1268     *
1269     * @see #LITERAL_NEW
1270     * @see #FOR_INIT
1271     * @see #FOR_ITERATOR
1272     * @see #EXPR
1273     * @see #METHOD_CALL
1274     * @see #CTOR_CALL
1275     * @see #SUPER_CTOR_CALL
1276     **/
1277    public static final int ELIST = JavaLanguageLexer.ELIST;
1278    /**
1279     * A for loop initializer.  This is a child of
1280     * {@code LITERAL_FOR}.  The children of this element may be
1281     * a comma separated list of variable declarations, an expression
1282     * list, or empty.
1283     *
1284     * <p>For example:</p>
1285     * <pre>
1286     * for (int i = 0; i &lt; arr.length; i++) {}
1287     * </pre>
1288     *
1289     * <p>parses as:</p>
1290     * <pre>
1291     * LITERAL_FOR -&gt; for
1292     *  |--LPAREN -&gt; (
1293     *  |--FOR_INIT -&gt; FOR_INIT
1294     *  |   `--VARIABLE_DEF -&gt; VARIABLE_DEF
1295     *  |       |--MODIFIERS -&gt; MODIFIERS
1296     *  |       |--TYPE -&gt; TYPE
1297     *  |       |   `--LITERAL_INT -&gt; int
1298     *  |       |--IDENT -&gt; i
1299     *  |       `--ASSIGN -&gt; =
1300     *  |           `--EXPR -&gt; EXPR
1301     *  |               `--NUM_INT -&gt; 0
1302     *  |--SEMI -&gt; ;
1303     *  |--FOR_CONDITION -&gt; FOR_CONDITION
1304     *  |   `--EXPR -&gt; EXPR
1305     *  |       `--LT -&gt; &lt;
1306     *  |           |--IDENT -&gt; i
1307     *  |           `--DOT -&gt; .
1308     *  |               |--IDENT -&gt; arr
1309     *  |               `--IDENT -&gt; length
1310     *  |--SEMI -&gt; ;
1311     *  |--FOR_ITERATOR -&gt; FOR_ITERATOR
1312     *  |   `--ELIST -&gt; ELIST
1313     *  |       `--EXPR -&gt; EXPR
1314     *  |           `--POST_INC -&gt; ++
1315     *  |               `--IDENT -&gt; i
1316     *  |--RPAREN -&gt; )
1317     *  `--SLIST -&gt; {
1318     *      `--RCURLY -&gt; }
1319     * </pre>
1320     *
1321     * @see #VARIABLE_DEF
1322     * @see #ELIST
1323     * @see #LITERAL_FOR
1324     **/
1325    public static final int FOR_INIT = JavaLanguageLexer.FOR_INIT;
1326    /**
1327     * A for loop condition.  This is a child of
1328     * {@code LITERAL_FOR}.  The child of this element is an
1329     * optional expression.
1330     *
1331     * <p>For example:</p>
1332     * <pre>
1333     * for (int i = 0; i &lt; arr.length; i++) {}
1334     * </pre>
1335     *
1336     * <p>parses as:</p>
1337     * <pre>
1338     * LITERAL_FOR -&gt; for
1339     *  |--LPAREN -&gt; (
1340     *  |--FOR_INIT -&gt; FOR_INIT
1341     *  |   `--VARIABLE_DEF -&gt; VARIABLE_DEF
1342     *  |       |--MODIFIERS -&gt; MODIFIERS
1343     *  |       |--TYPE -&gt; TYPE
1344     *  |       |   `--LITERAL_INT -&gt; int
1345     *  |       |--IDENT -&gt; i
1346     *  |       `--ASSIGN -&gt; =
1347     *  |           `--EXPR -&gt; EXPR
1348     *  |               `--NUM_INT -&gt; 0
1349     *  |--SEMI -&gt; ;
1350     *  |--FOR_CONDITION -&gt; FOR_CONDITION
1351     *  |   `--EXPR -&gt; EXPR
1352     *  |       `--LT -&gt; &lt;
1353     *  |           |--IDENT -&gt; i
1354     *  |           `--DOT -&gt; .
1355     *  |               |--IDENT -&gt; arr
1356     *  |               `--IDENT -&gt; length
1357     *  |--SEMI -&gt; ;
1358     *  |--FOR_ITERATOR -&gt; FOR_ITERATOR
1359     *  |   `--ELIST -&gt; ELIST
1360     *  |       `--EXPR -&gt; EXPR
1361     *  |           `--POST_INC -&gt; ++
1362     *  |               `--IDENT -&gt; i
1363     *  |--RPAREN -&gt; )
1364     *  `--SLIST -&gt; {
1365     *      `--RCURLY -&gt; }
1366     * </pre>
1367     *
1368     * @see #EXPR
1369     * @see #LITERAL_FOR
1370     **/
1371    public static final int FOR_CONDITION =
1372        JavaLanguageLexer.FOR_CONDITION;
1373
1374    /**
1375     * A for loop iterator.  This is a child of
1376     * {@code LITERAL_FOR}.  The child of this element is an
1377     * optional expression list.
1378     *
1379     * <p>For example:</p>
1380     * <pre>
1381     * for (int i = 0; i &lt; arr.length; i++) {}
1382     * </pre>
1383     *
1384     * <p>parses as:</p>
1385     * <pre>
1386     * LITERAL_FOR -&gt; for
1387     *  |--LPAREN -&gt; (
1388     *  |--FOR_INIT -&gt; FOR_INIT
1389     *  |   `--VARIABLE_DEF -&gt; VARIABLE_DEF
1390     *  |       |--MODIFIERS -&gt; MODIFIERS
1391     *  |       |--TYPE -&gt; TYPE
1392     *  |       |   `--LITERAL_INT -&gt; int
1393     *  |       |--IDENT -&gt; i
1394     *  |       `--ASSIGN -&gt; =
1395     *  |           `--EXPR -&gt; EXPR
1396     *  |               `--NUM_INT -&gt; 0
1397     *  |--SEMI -&gt; ;
1398     *  |--FOR_CONDITION -&gt; FOR_CONDITION
1399     *  |   `--EXPR -&gt; EXPR
1400     *  |       `--LT -&gt; &lt;
1401     *  |           |--IDENT -&gt; i
1402     *  |           `--DOT -&gt; .
1403     *  |               |--IDENT -&gt; arr
1404     *  |               `--IDENT -&gt; length
1405     *  |--SEMI -&gt; ;
1406     *  |--FOR_ITERATOR -&gt; FOR_ITERATOR
1407     *  |   `--ELIST -&gt; ELIST
1408     *  |       `--EXPR -&gt; EXPR
1409     *  |           `--POST_INC -&gt; ++
1410     *  |               `--IDENT -&gt; i
1411     *  |--RPAREN -&gt; )
1412     *  `--SLIST -&gt; {
1413     *      `--RCURLY -&gt; }
1414     * </pre>
1415     *
1416     * @see #ELIST
1417     * @see #LITERAL_FOR
1418     **/
1419    public static final int FOR_ITERATOR =
1420        JavaLanguageLexer.FOR_ITERATOR;
1421
1422    /**
1423     * The empty statement.  This goes in place of an
1424     * {@code SLIST} for a {@code for} or {@code while}
1425     * loop body.
1426     *
1427     * <p>For example:</p>
1428     * <pre>
1429     * while(true);
1430     * </pre>
1431     *
1432     * <p>parses as:</p>
1433     * <pre>
1434     * LITERAL_WHILE -&gt; while
1435     *  |--LPAREN -&gt; (
1436     *  |--EXPR -&gt; EXPR
1437     *  |   `--LITERAL_TRUE -&gt; true
1438     *  |--RPAREN -&gt; )
1439     *  `--EMPTY_STAT -&gt; ;
1440     * </pre>
1441     *
1442     * @see <a
1443     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.6">Java
1444     *     Language Specification, &sect;14.6</a>
1445     * @see #LITERAL_FOR
1446     * @see #LITERAL_WHILE
1447     **/
1448    public static final int EMPTY_STAT = JavaLanguageLexer.EMPTY_STAT;
1449    /**
1450     * The {@code final} keyword.
1451     *
1452     * <p>For example:</p>
1453     * <pre>
1454     * public final int x = 0;
1455     * </pre>
1456     *
1457     * <p>parses as:</p>
1458     * <pre>
1459     * VARIABLE_DEF -&gt; VARIABLE_DEF
1460     *  |--MODIFIERS -&gt; MODIFIERS
1461     *  |   |--LITERAL_PUBLIC -&gt; public
1462     *  |   `--FINAL -&gt; final
1463     *  |--TYPE -&gt; TYPE
1464     *  |   `--LITERAL_INT -&gt; int
1465     *  |--IDENT -&gt; x
1466     *  |--ASSIGN -&gt; =
1467     *  |   `--EXPR -&gt; EXPR
1468     *  |       `--NUM_INT -&gt; 0
1469     *  `--SEMI -&gt; ;
1470     * </pre>
1471     *
1472     * @see #MODIFIERS
1473     **/
1474    public static final int FINAL = JavaLanguageLexer.FINAL;
1475    /**
1476     * The {@code abstract} keyword.
1477     *
1478     * <p>For example:</p>
1479     * <pre>
1480     *  public abstract class MyClass
1481     *  {
1482     *  }
1483     * </pre>
1484     *
1485     * <p>parses as:</p>
1486     * <pre>
1487     * --CLASS_DEF
1488     *    |--MODIFIERS
1489     *    |   |--LITERAL_PUBLIC (public)
1490     *    |   `--ABSTRACT (abstract)
1491     *    |--LITERAL_CLASS (class)
1492     *    |--IDENT (MyClass)
1493     *    `--OBJBLOCK
1494     *        |--LCURLY ({)
1495     *        `--RCURLY (})
1496     * </pre>
1497     *
1498     * @see #MODIFIERS
1499     **/
1500    public static final int ABSTRACT = JavaLanguageLexer.ABSTRACT;
1501    /**
1502     * The {@code strictfp} keyword.
1503     *
1504     * <p>For example:</p>
1505     * <pre>public strictfp class Test {}</pre>
1506     *
1507     * <p>parses as:</p>
1508     * <pre>
1509     * CLASS_DEF -&gt; CLASS_DEF
1510     * |--MODIFIERS -&gt; MODIFIERS
1511     * |   |--LITERAL_PUBLIC -&gt; public
1512     * |   `--STRICTFP -&gt; strictfp
1513     * |--LITERAL_CLASS -&gt; class
1514     * |--IDENT -&gt; Test
1515     * `--OBJBLOCK -&gt; OBJBLOCK
1516     *     |--LCURLY -&gt; {
1517     *     `--RCURLY -&gt; }
1518     * </pre>
1519     *
1520     * @see #MODIFIERS
1521     **/
1522    public static final int STRICTFP = JavaLanguageLexer.STRICTFP;
1523    /**
1524     * A super constructor call.
1525     *
1526     * <p>For example:</p>
1527     * <pre>
1528     * super(1);
1529     * </pre>
1530     *
1531     * <p>parses as:</p>
1532     * <pre>
1533     * SUPER_CTOR_CALL -&gt; super
1534     *  |--LPAREN -&gt; (
1535     *  |--ELIST -&gt; ELIST
1536     *  |   `--EXPR -&gt; EXPR
1537     *  |       `--NUM_INT -&gt; 1
1538     *  |--RPAREN -&gt; )
1539     *  `--SEMI -&gt; ;
1540     * </pre>
1541     *
1542     * @see #ELIST
1543     * @see #RPAREN
1544     * @see #SEMI
1545     * @see #CTOR_CALL
1546     **/
1547    public static final int SUPER_CTOR_CALL =
1548        JavaLanguageLexer.SUPER_CTOR_CALL;
1549
1550    /**
1551     * A constructor call.
1552     *
1553     * <p>For example:</p>
1554     * <pre>
1555     * this(1);
1556     * </pre>
1557     *
1558     * <p>parses as:</p>
1559     * <pre>
1560     * CTOR_CALL -&gt; this
1561     *  |--LPAREN -&gt; (
1562     *  |--ELIST -&gt; ELIST
1563     *  |   `--EXPR -&gt; EXPR
1564     *  |       `--NUM_INT -&gt; 1
1565     *  |--RPAREN -&gt; )
1566     *  `--SEMI -&gt; ;
1567     * </pre>
1568     *
1569     * @see #ELIST
1570     * @see #RPAREN
1571     * @see #SEMI
1572     * @see #SUPER_CTOR_CALL
1573     **/
1574    public static final int CTOR_CALL = JavaLanguageLexer.CTOR_CALL;
1575
1576    /**
1577     * The statement terminator ({@code ;}).  Depending on the
1578     * context, this make occur as a sibling, a child, or not at all.
1579     *
1580     * <p>For example:</p>
1581     * <pre>
1582     * for(;;);
1583     * </pre>
1584     *
1585     * <p>parses as:</p>
1586     * <pre>
1587     * LITERAL_FOR -&gt; for
1588     *  |--LPAREN -&gt; (
1589     *  |--FOR_INIT -&gt; FOR_INIT
1590     *  |--SEMI -&gt; ;
1591     *  |--FOR_CONDITION -&gt; FOR_CONDITION
1592     *  |--SEMI -&gt; ;
1593     *  |--FOR_ITERATOR -&gt; FOR_ITERATOR
1594     *  |--RPAREN -&gt; )
1595     *  `--EMPTY_STAT -&gt; ;
1596     * </pre>
1597     *
1598     * @see #PACKAGE_DEF
1599     * @see #IMPORT
1600     * @see #SLIST
1601     * @see #ARRAY_INIT
1602     * @see #LITERAL_FOR
1603     **/
1604    public static final int SEMI = JavaLanguageLexer.SEMI;
1605
1606    /**
1607     * The {@code ]} symbol.
1608     *
1609     * <p>For example:</p>
1610     * <pre>
1611     * int a[];
1612     * </pre>
1613     *
1614     * <p>parses as:</p>
1615     * <pre>
1616     * VARIABLE_DEF -&gt; VARIABLE_DEF
1617     *  |--MODIFIERS -&gt; MODIFIERS
1618     *  |--TYPE -&gt; TYPE
1619     *  |   |--LITERAL_INT -&gt; int
1620     *  |   `--ARRAY_DECLARATOR -&gt; [
1621     *  |       `--RBRACK -&gt; ]
1622     *  |--IDENT -&gt; a
1623     *  `--SEMI -&gt; ;
1624     * </pre>
1625     *
1626     * @see #INDEX_OP
1627     * @see #ARRAY_DECLARATOR
1628     **/
1629    public static final int RBRACK = JavaLanguageLexer.RBRACK;
1630    /**
1631     * The {@code void} keyword.
1632     *
1633     * <p>For example:</p>
1634     * <pre>
1635     * {@code void LITERAL_VOID(){}}
1636     * </pre>
1637     *
1638     * <p>'void' parses as:</p>
1639     * <pre>
1640     * METHOD_DEF -&gt; METHOD_DEF
1641     *  |--MODIFIERS -&gt; MODIFIERS
1642     *  |--TYPE -&gt; TYPE
1643     *  |   `--LITERAL_VOID -&gt; void
1644     *  |--IDENT -&gt; LITERAL_VOID
1645     * </pre>
1646     *
1647     * @see #TYPE
1648     **/
1649    public static final int LITERAL_VOID =
1650        JavaLanguageLexer.LITERAL_VOID;
1651
1652    /**
1653     * The {@code boolean} keyword.
1654     *
1655     * <p>For example:</p>
1656     * <pre>
1657     * public boolean flag;
1658     * </pre>
1659     *
1660     * <p>parses as:</p>
1661     * <pre>
1662     * VARIABLE_DEF -&gt; VARIABLE_DEF
1663     *  |--MODIFIERS -&gt; MODIFIERS
1664     *  |   `--LITERAL_PUBLIC -&gt; public
1665     *  |--TYPE -&gt; TYPE
1666     *  |   `--LITERAL_BOOLEAN -&gt; boolean
1667     *  |--IDENT -&gt; flag
1668     *  `--SEMI -&gt; ;
1669     * </pre>
1670     *
1671     * @see #TYPE
1672     **/
1673    public static final int LITERAL_BOOLEAN =
1674        JavaLanguageLexer.LITERAL_BOOLEAN;
1675
1676    /**
1677     * The {@code byte} keyword.
1678     *
1679     * <p>For example:</p>
1680     * <pre>
1681     * public byte x;
1682     * </pre>
1683     *
1684     * <p>parses as:</p>
1685     * <pre>
1686     * VARIABLE_DEF -&gt; VARIABLE_DEF
1687     *  |--MODIFIERS -&gt; MODIFIERS
1688     *  |   `--LITERAL_PUBLIC -&gt; public
1689     *  |--TYPE -&gt; TYPE
1690     *  |   `--LITERAL_BYTE -&gt; byte
1691     *  |--IDENT -&gt; x
1692     *  `--SEMI -&gt; ;
1693     * </pre>
1694     *
1695     * @see #TYPE
1696     **/
1697    public static final int LITERAL_BYTE =
1698        JavaLanguageLexer.LITERAL_BYTE;
1699
1700    /**
1701     * The {@code char} keyword.
1702     *
1703     * <p>For example:</p>
1704     * <pre>
1705     * char a = 'A';
1706     * </pre>
1707     *
1708     * <p>parses as:</p>
1709     * <pre>
1710     * VARIABLE_DEF -&gt; VARIABLE_DEF
1711     *  |--MODIFIERS -&gt; MODIFIERS
1712     *  |--TYPE -&gt; TYPE
1713     *  |   `--LITERAL_CHAR -&gt; char
1714     *  |--IDENT -&gt; a
1715     *  |--ASSIGN -&gt; =
1716     *  |   `--EXPR -&gt; EXPR
1717     *  |       `--CHAR_LITERAL -&gt; 'A'
1718     *  `--SEMI -&gt; ;
1719     * </pre>
1720     *
1721     * @see #TYPE
1722     **/
1723    public static final int LITERAL_CHAR =
1724        JavaLanguageLexer.LITERAL_CHAR;
1725
1726    /**
1727     * The {@code short} keyword.
1728     *
1729     * <p>For example:</p>
1730     * <pre>
1731     * public short x;
1732     * </pre>
1733     *
1734     * <p>parses as:</p>
1735     * <pre>
1736     * VARIABLE_DEF -&gt; VARIABLE_DEF
1737     *  |--MODIFIERS -&gt; MODIFIERS
1738     *  |   `--LITERAL_PUBLIC -&gt; public
1739     *  |--TYPE -&gt; TYPE
1740     *  |   `--LITERAL_SHORT -&gt; short
1741     *  |--IDENT -&gt; x
1742     *  `--SEMI -&gt; ;
1743     * </pre>
1744     *
1745     * @see #TYPE
1746     **/
1747    public static final int LITERAL_SHORT =
1748        JavaLanguageLexer.LITERAL_SHORT;
1749
1750    /**
1751     * The {@code int} keyword.
1752     *
1753     * <p>For example:</p>
1754     * <pre>
1755     * public int x;
1756     * </pre>
1757     *
1758     * <p>parses as:</p>
1759     * <pre>
1760     * VARIABLE_DEF -&gt; VARIABLE_DEF
1761     *  |--MODIFIERS -&gt; MODIFIERS
1762     *  |   `--LITERAL_PUBLIC -&gt; public
1763     *  |--TYPE -&gt; TYPE
1764     *  |   `--LITERAL_INT -&gt; int
1765     *  |--IDENT -&gt; x
1766     *  `--SEMI -&gt; ;
1767     * </pre>
1768     *
1769     * @see #TYPE
1770     **/
1771    public static final int LITERAL_INT = JavaLanguageLexer.LITERAL_INT;
1772    /**
1773     * The {@code float} keyword.
1774     *
1775     * <p>For example:</p>
1776     * <pre>
1777     * public float x;
1778     * </pre>
1779     *
1780     * <p>parses as:</p>
1781     * <pre>
1782     * VARIABLE_DEF -&gt; VARIABLE_DEF
1783     *  |--MODIFIERS -&gt; MODIFIERS
1784     *  |   `--LITERAL_PUBLIC -&gt; public
1785     *  |--TYPE -&gt; TYPE
1786     *  |   `--LITERAL_FLOAT -&gt; float
1787     *  |--IDENT -&gt; x
1788     *  `--SEMI -&gt; ;
1789     * </pre>
1790     *
1791     * @see #TYPE
1792     **/
1793    public static final int LITERAL_FLOAT =
1794        JavaLanguageLexer.LITERAL_FLOAT;
1795
1796    /**
1797     * The {@code long} keyword.
1798     *
1799     * <p>For example:</p>
1800     * <pre>
1801     * public long x;
1802     * </pre>
1803     *
1804     * <p>parses as:</p>
1805     * <pre>
1806     * VARIABLE_DEF -&gt; VARIABLE_DEF
1807     *  |--MODIFIERS -&gt; MODIFIERS
1808     *  |   `--LITERAL_PUBLIC -&gt; public
1809     *  |--TYPE -&gt; TYPE
1810     *  |   `--LITERAL_LONG -&gt; long
1811     *  |--IDENT -&gt; x
1812     *  `--SEMI -&gt; ;
1813     * </pre>
1814     *
1815     * @see #TYPE
1816     **/
1817    public static final int LITERAL_LONG =
1818        JavaLanguageLexer.LITERAL_LONG;
1819
1820    /**
1821     * The {@code double} keyword.
1822     *
1823     * <p>For example:</p>
1824     * <pre>
1825     * public double x;
1826     * </pre>
1827     *
1828     * <p>parses as:</p>
1829     * <pre>
1830     * VARIABLE_DEF -&gt; VARIABLE_DEF
1831     *  |--MODIFIERS -&gt; MODIFIERS
1832     *  |   `--LITERAL_PUBLIC -&gt; public
1833     *  |--TYPE -&gt; TYPE
1834     *  |   `--LITERAL_DOUBLE -&gt; double
1835     *  |--IDENT -&gt; x
1836     *  `--SEMI -&gt; ;
1837     * </pre>
1838     *
1839     * @see #TYPE
1840     **/
1841    public static final int LITERAL_DOUBLE =
1842        JavaLanguageLexer.LITERAL_DOUBLE;
1843
1844    /**
1845     * An identifier.  These can be names of types, subpackages,
1846     * fields, methods, parameters, and local variables.
1847     *
1848     * <p>For example:</p>
1849     * <pre>
1850     * int a = 10;
1851     * </pre>
1852     *
1853     * <p>parses as:</p>
1854     * <pre>
1855     * VARIABLE_DEF -&gt; VARIABLE_DEF
1856     *  |--MODIFIERS -&gt; MODIFIERS
1857     *  |--TYPE -&gt; TYPE
1858     *  |   `--LITERAL_INT -&gt; int
1859     *  |--IDENT -&gt; a
1860     *  |   `--ASSIGN -&gt; =
1861     *  |       `--EXPR -&gt; EXPR
1862     *  |           `--NUM_INT -&gt; 10
1863     *  `--SEMI -&gt; ;
1864     * </pre>
1865     *
1866     **/
1867    public static final int IDENT = JavaLanguageLexer.IDENT;
1868    /**
1869     * The {@code .} (dot) operator.
1870     *
1871     * <p>For example:</p>
1872     * <pre>
1873     * return person.name;
1874     * </pre>
1875     *
1876     * <p>parses as:</p>
1877     * <pre>
1878     * --LITERAL_RETURN -&gt; return
1879     *    |--EXPR -&gt; EXPR
1880     *    |   `--DOT -&gt; .
1881     *    |       |--IDENT -&gt; person
1882     *    |       `--IDENT -&gt; name
1883     *    `--SEMI -&gt; ;
1884     * </pre>
1885     *
1886     * @see FullIdent
1887     **/
1888    public static final int DOT = JavaLanguageLexer.DOT;
1889    /**
1890     * The {@code *} (multiplication or wildcard) operator.
1891     *
1892     * <p>For example:</p>
1893     * <pre>
1894     * f = m * a;
1895     * </pre>
1896     *
1897     * <p>parses as:</p>
1898     * <pre>
1899     * |--EXPR -&gt; EXPR
1900     * |   `--ASSIGN -&gt; =
1901     * |       |--IDENT -&gt; f
1902     * |       `--STAR -&gt; *
1903     * |           |--IDENT -&gt; m
1904     * |           `--IDENT -&gt; a
1905     * |--SEMI -&gt; ;
1906     * </pre>
1907     *
1908     * @see <a
1909     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-7.html#jls-7.5.2">Java
1910     *     Language Specification, &sect;7.5.2</a>
1911     * @see <a
1912     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.17.1">Java
1913     *     Language Specification, &sect;15.17.1</a>
1914     * @see #EXPR
1915     * @see #IMPORT
1916     **/
1917    public static final int STAR = JavaLanguageLexer.STAR;
1918    /**
1919     * The {@code private} keyword.
1920     *
1921     * <p>For example:</p>
1922     * <pre>
1923     * private int x;
1924     * </pre>
1925     *
1926     * <p>parses as:</p>
1927     * <pre>
1928     * VARIABLE_DEF -&gt; VARIABLE_DEF
1929     *  |--MODIFIERS -&gt; MODIFIERS
1930     *  |   `--LITERAL_PRIVATE -&gt; private
1931     *  |--TYPE -&gt; TYPE
1932     *  |   `--LITERAL_INT -&gt; int
1933     *  |--IDENT -&gt; x
1934     *  `--SEMI -&gt; ;
1935     * </pre>
1936     *
1937     * @see #MODIFIERS
1938     **/
1939    public static final int LITERAL_PRIVATE =
1940        JavaLanguageLexer.LITERAL_PRIVATE;
1941
1942    /**
1943     * The {@code public} keyword.
1944     *
1945     * <p>For example:</p>
1946     * <pre>
1947     * public int x;
1948     * </pre>
1949     *
1950     * <p>parses as:</p>
1951     * <pre>
1952     * VARIABLE_DEF -&gt; VARIABLE_DEF
1953     *  |--MODIFIERS -&gt; MODIFIERS
1954     *  |   `--LITERAL_PUBLIC -&gt; public
1955     *  |--TYPE -&gt; TYPE
1956     *  |   `--LITERAL_INT -&gt; int
1957     *  |--IDENT -&gt; x
1958     *  `--SEMI -&gt; ;
1959     * </pre>
1960     *
1961     * @see #MODIFIERS
1962     **/
1963    public static final int LITERAL_PUBLIC =
1964        JavaLanguageLexer.LITERAL_PUBLIC;
1965
1966    /**
1967     * The {@code protected} keyword.
1968     *
1969     * <p>For example:</p>
1970     * <pre>
1971     * protected int x;
1972     * </pre>
1973     *
1974     * <p>parses as:</p>
1975     * <pre>
1976     * VARIABLE_DEF -&gt; VARIABLE_DEF
1977     *  |--MODIFIERS -&gt; MODIFIERS
1978     *  |   `--LITERAL_PROTECTED -&gt; protected
1979     *  |--TYPE -&gt; TYPE
1980     *  |   `--LITERAL_INT -&gt; int
1981     *  |--IDENT -&gt; x
1982     *  `--SEMI -&gt; ;
1983     * </pre>
1984     *
1985     * @see #MODIFIERS
1986     **/
1987    public static final int LITERAL_PROTECTED =
1988        JavaLanguageLexer.LITERAL_PROTECTED;
1989
1990    /**
1991     * The {@code static} keyword.
1992     *
1993     * <p>For example:</p>
1994     * <pre>
1995     * public static int x;
1996     * </pre>
1997     *
1998     * <p>parses as:</p>
1999     * <pre>
2000     * VARIABLE_DEF -&gt; VARIABLE_DEF
2001     *  |--MODIFIERS -&gt; MODIFIERS
2002     *  |   |--LITERAL_PUBLIC -&gt; public
2003     *  |   `--LITERAL_STATIC -&gt; static
2004     *  |--TYPE -&gt; TYPE
2005     *  |   `--LITERAL_INT -&gt; int
2006     *  |--IDENT -&gt; x
2007     *  `--SEMI -&gt; ;
2008     * </pre>
2009     *
2010     * @see #MODIFIERS
2011     **/
2012    public static final int LITERAL_STATIC =
2013        JavaLanguageLexer.LITERAL_STATIC;
2014
2015    /**
2016     * The {@code transient} keyword.
2017     *
2018     * <p>For example:</p>
2019     * <pre>
2020     * transient int a;
2021     * </pre>
2022     *
2023     * <p>parses as:</p>
2024     * <pre>
2025     * VARIABLE_DEF -&gt; VARIABLE_DEF
2026     *  |--MODIFIERS -&gt; MODIFIERS
2027     *  |   `--LITERAL_TRANSIENT -&gt; transient
2028     *  |--TYPE -&gt; TYPE
2029     *  |   `--LITERAL_INT -&gt; int
2030     *  |--IDENT -&gt; a
2031     *  `--SEMI -&gt; ;
2032     * </pre>
2033     *
2034     * @see #MODIFIERS
2035     **/
2036    public static final int LITERAL_TRANSIENT =
2037        JavaLanguageLexer.LITERAL_TRANSIENT;
2038
2039    /**
2040     * The {@code native} keyword.
2041     *
2042     * <p>For example:</p>
2043     * <pre>
2044     * native void foo(){}
2045     * </pre>
2046     *
2047     * <p>parses as:</p>
2048     * <pre>
2049     * METHOD_DEF -&gt; METHOD_DEF
2050     *  |--MODIFIERS -&gt; MODIFIERS
2051     *  |   `--LITERAL_NATIVE -&gt; native
2052     *  |--TYPE -&gt; TYPE
2053     *  |   `--LITERAL_VOID -&gt; void
2054     *  |--IDENT -&gt; foo
2055     *  |--LPAREN -&gt; (
2056     *  |--PARAMETERS -&gt; PARAMETERS
2057     *  |--RPAREN -&gt; )
2058     *  `--SLIST -&gt; {
2059     *      `--RCURLY -&gt; }
2060     * </pre>
2061     *
2062     * @see #MODIFIERS
2063     **/
2064    public static final int LITERAL_NATIVE =
2065        JavaLanguageLexer.LITERAL_NATIVE;
2066
2067    /**
2068     * The {@code synchronized} keyword.  This may be used as a
2069     * modifier of a method or in the definition of a synchronized
2070     * block.
2071     *
2072     * <p>For example:</p>
2073     *
2074     * <pre>
2075     * synchronized(this)
2076     * {
2077     *   x++;
2078     * }
2079     * </pre>
2080     *
2081     * <p>parses as:</p>
2082     *
2083     * <pre>
2084     * |--LITERAL_SYNCHRONIZED -&gt; synchronized
2085     * |   |--LPAREN -&gt; (
2086     * |   |--EXPR -&gt; EXPR
2087     * |   |   `--LITERAL_THIS -&gt; this
2088     * |   |--RPAREN -&gt; )
2089     * |   `--SLIST -&gt; {
2090     * |       |--EXPR -&gt; EXPR
2091     * |       |   `--POST_INC -&gt; ++
2092     * |       |       `--IDENT -&gt; x
2093     * |       |--SEMI -&gt; ;
2094     * |       `--RCURLY -&gt; }
2095     * `--RCURLY -&gt; }
2096     * </pre>
2097     *
2098     * @see #MODIFIERS
2099     * @see #LPAREN
2100     * @see #EXPR
2101     * @see #RPAREN
2102     * @see #SLIST
2103     * @see #RCURLY
2104     **/
2105    public static final int LITERAL_SYNCHRONIZED =
2106        JavaLanguageLexer.LITERAL_SYNCHRONIZED;
2107
2108    /**
2109     * The {@code volatile} keyword. This may be used as a
2110     * modifier of a field.
2111     *
2112     * <p>For example:</p>
2113     * <pre>
2114     * private volatile int x;
2115     * </pre>
2116     *
2117     * <p>parses as:</p>
2118     * <pre>
2119     * VARIABLE_DEF -&gt; VARIABLE_DEF
2120     * |--MODIFIERS -&gt; MODIFIERS
2121     * |   |--LITERAL_PRIVATE -&gt; private
2122     * |   `--LITERAL_VOLATILE -&gt; volatile
2123     * |--TYPE -&gt; TYPE
2124     * |   `--LITERAL_INT -&gt; int
2125     * |--IDENT -&gt; x
2126     * `--SEMI -&gt; ;
2127     * </pre>
2128     *
2129     * @see #MODIFIERS
2130     **/
2131    public static final int LITERAL_VOLATILE =
2132        JavaLanguageLexer.LITERAL_VOLATILE;
2133
2134    /**
2135     * The {@code class} keyword.  This element appears both
2136     * as part of a class declaration, and inline to reference a
2137     * class object.
2138     *
2139     * <p>For example:</p>
2140     * <pre>
2141     * class Test {
2142     * }
2143     * </pre>
2144     *
2145     * <p>parses as:</p>
2146     * <pre>
2147     * CLASS_DEF -&gt; CLASS_DEF
2148     * |--MODIFIERS -&gt; MODIFIERS
2149     * |--LITERAL_CLASS -&gt; class
2150     * |--IDENT -&gt; Test
2151     * `--OBJBLOCK -&gt; OBJBLOCK
2152     *     |--LCURLY -&gt; {
2153     *     `--RCURLY -&gt; }
2154     * </pre>
2155     *
2156     * <p>For example:</p>
2157     * <pre> int.class
2158     * </pre>
2159     *
2160     * <p>parses as:</p>
2161     * <pre>
2162     * EXPR -&gt; EXPR
2163     *  `--DOT -&gt; .
2164     *      |--LITERAL_INT -&gt; int
2165     *      `--LITERAL_CLASS -&gt; class
2166     * </pre>
2167     *
2168     * @see #DOT
2169     * @see #IDENT
2170     * @see #CLASS_DEF
2171     * @see FullIdent
2172     **/
2173    public static final int LITERAL_CLASS =
2174        JavaLanguageLexer.LITERAL_CLASS;
2175
2176    /**
2177     * The {@code interface} keyword. This token appears in
2178     * interface definition.
2179     *
2180     * <p>For example:</p>
2181     *
2182     * <pre>
2183     * public interface MyInterface {
2184     *
2185     * }
2186     * </pre>
2187     *
2188     * <p>parses as:</p>
2189     *
2190     * <pre>
2191     * INTERFACE_DEF -&gt; INTERFACE_DEF
2192     * |--MODIFIERS -&gt; MODIFIERS
2193     * |   `--LITERAL_PUBLIC -&gt; public
2194     * |--LITERAL_INTERFACE -&gt; interface
2195     * |--IDENT -&gt; MyInterface
2196     * `--OBJBLOCK -&gt; OBJBLOCK
2197     *     |--LCURLY -&gt; {
2198     *     `--RCURLY -&gt; }
2199     * </pre>
2200     *
2201     * @see #INTERFACE_DEF
2202     **/
2203    public static final int LITERAL_INTERFACE =
2204        JavaLanguageLexer.LITERAL_INTERFACE;
2205
2206    /**
2207     * A left curly brace (<code>{</code>).
2208     *
2209     * <p>For example:</p>
2210     *
2211     * <pre>
2212     * class App {
2213     *   int num;
2214     * }
2215     * </pre>
2216     *
2217     * <p>parses as:</p>
2218     * <pre>
2219     * CLASS_DEF -&gt; CLASS_DEF
2220     * |--MODIFIERS -&gt; MODIFIERS
2221     * |--LITERAL_CLASS -&gt; class
2222     * |--IDENT -&gt; App
2223     * `--OBJBLOCK -&gt; OBJBLOCK
2224     *     |--LCURLY -&gt; {
2225     *     |--VARIABLE_DEF -&gt; VARIABLE_DEF
2226     *     |   |--MODIFIERS -&gt; MODIFIERS
2227     *     |   |--TYPE -&gt; TYPE
2228     *     |   |   `--LITERAL_INT -&gt; int
2229     *     |   |--IDENT -&gt; num
2230     *     |   `--SEMI -&gt; ;
2231     *     `--RCURLY -&gt; }
2232     * </pre>
2233     *
2234     * @see #OBJBLOCK
2235     * @see #ARRAY_INIT
2236     * @see #SLIST
2237     **/
2238    public static final int LCURLY = JavaLanguageLexer.LCURLY;
2239    /**
2240     * A right curly brace (<code>}</code>).
2241     *
2242     * <p>For example:</p>
2243     * <pre>
2244     * {@code
2245     * void foo(){}
2246     * }
2247     * </pre>
2248     *
2249     * <p>parses as:</p>
2250     * <pre>
2251     * METHOD_DEF -&gt; METHOD_DEF
2252     *  |--MODIFIERS -&gt; MODIFIERS
2253     *  |--TYPE -&gt; TYPE
2254     *  |   `--LITERAL_VOID -&gt; void
2255     *  |--IDENT -&gt; foo
2256     *  |--LPAREN -&gt; (
2257     *  |--PARAMETERS -&gt; PARAMETERS
2258     *  |--RPAREN -&gt; )
2259     *  `--SLIST -&gt; {
2260     *      `--RCURLY -&gt; }
2261     * </pre>
2262     *
2263     * @see #OBJBLOCK
2264     * @see #ARRAY_INIT
2265     * @see #SLIST
2266     **/
2267    public static final int RCURLY = JavaLanguageLexer.RCURLY;
2268
2269    /**
2270     * The {@code ,} (comma) operator.
2271     *
2272     * <p>For example:</p>
2273     * <pre>
2274     * int a, b;
2275     * </pre>
2276     *
2277     * <p>parses as:</p>
2278     * <pre>
2279     * |--VARIABLE_DEF -&gt; VARIABLE_DEF
2280     * |   |--MODIFIERS -&gt; MODIFIERS
2281     * |   |--TYPE -&gt; TYPE
2282     * |   |   `--LITERAL_INT -&gt; int
2283     * |   `--IDENT -&gt; a
2284     * |--COMMA -&gt; ,
2285     * |--VARIABLE_DEF -&gt; VARIABLE_DEF
2286     * |   |--MODIFIERS -&gt; MODIFIERS
2287     * |   |--TYPE -&gt; TYPE
2288     * |   |   `--LITERAL_INT -&gt; int
2289     * |   `--IDENT -&gt; b
2290     * |--SEMI -&gt; ;
2291     * </pre>
2292     *
2293     * @see #ARRAY_INIT
2294     * @see #FOR_INIT
2295     * @see #FOR_ITERATOR
2296     * @see #LITERAL_THROWS
2297     * @see #IMPLEMENTS_CLAUSE
2298     **/
2299    public static final int COMMA = JavaLanguageLexer.COMMA;
2300
2301    /**
2302     * A left parenthesis ({@code (}).
2303     *
2304     * <p>For example:</p>
2305     * <pre>
2306     * Integer val = new Integer();
2307     * while (false) {
2308     *     val += (-3);
2309     * }
2310     * </pre>
2311     *
2312     * <p>parses as:</p>
2313     * <pre>
2314     *  |--VARIABLE_DEF -&gt; VARIABLE_DEF
2315     *  |   |--MODIFIERS -&gt; MODIFIERS
2316     *  |   |--TYPE -&gt; TYPE
2317     *  |   |   `--IDENT -&gt; Integer
2318     *  |   |--IDENT -&gt; val
2319     *  |   `--ASSIGN -&gt; =
2320     *  |       `--EXPR -&gt; EXPR
2321     *  |           `--LITERAL_NEW -&gt; new
2322     *  |               |--IDENT -&gt; Integer
2323     *  |               |--LPAREN -&gt; (
2324     *  |               |--ELIST -&gt; ELIST
2325     *  |               `--RPAREN -&gt; )
2326     *  |--SEMI -&gt; ;
2327     *  |--LITERAL_WHILE -&gt; while
2328     *  |   |--LPAREN -&gt; (
2329     *  |   |--EXPR -&gt; EXPR
2330     *  |   |   `--LITERAL_FALSE -&gt; false
2331     *  |   |--RPAREN -&gt; )
2332     *  |   `--SLIST -&gt; {
2333     *  |       |--EXPR -&gt; EXPR
2334     *  |       |   `--PLUS_ASSIGN -&gt; +=
2335     *  |       |       |--IDENT -&gt; val
2336     *  |       |       |--LPAREN -&gt; (
2337     *  |       |       |--UNARY_MINUS -&gt; -
2338     *  |       |       |   `--NUM_INT -&gt; 3
2339     *  |       |       `--RPAREN -&gt; )
2340     *  |       |--SEMI -&gt; ;
2341     *  |       `--RCURLY -&gt; }
2342     * </pre>
2343     *
2344     * @see #LITERAL_FOR
2345     * @see #LITERAL_NEW
2346     * @see #EXPR
2347     * @see #LITERAL_SWITCH
2348     * @see #LITERAL_CATCH
2349     **/
2350    public static final int LPAREN = JavaLanguageLexer.LPAREN;
2351    /**
2352     * A right parenthesis ({@code )}).
2353     *
2354     * <p>For example:</p>
2355     * <pre>
2356     * void check() {
2357     * }
2358     * </pre>
2359     *
2360     * <p>parses as:</p>
2361     * <pre>
2362     * METHOD_DEF -&gt; METHOD_DEF
2363     *  |--MODIFIERS -&gt; MODIFIERS
2364     *  |--TYPE -&gt; TYPE
2365     *  |   `--LITERAL_VOID -&gt; void
2366     *  |--IDENT -&gt; check
2367     *  |--LPAREN -&gt; (
2368     *  |--PARAMETERS -&gt; PARAMETERS
2369     *  |--RPAREN -&gt; )
2370     *  `--SLIST -&gt; {
2371     *      `--RCURLY -&gt; }
2372     * </pre>
2373     *
2374     * @see #LITERAL_FOR
2375     * @see #LITERAL_NEW
2376     * @see #METHOD_CALL
2377     * @see #TYPECAST
2378     * @see #EXPR
2379     * @see #LITERAL_SWITCH
2380     * @see #LITERAL_CATCH
2381     **/
2382    public static final int RPAREN = JavaLanguageLexer.RPAREN;
2383    /**
2384     * The {@code this} keyword use to refer the current object.
2385     * This can also be used to call the constructor.
2386     *
2387     * <p>For example:</p>
2388     * <pre>
2389     * this.name = name;
2390     * </pre>
2391     *
2392     * <p>parses as:</p>
2393     * <pre>
2394     * EXPR -&gt; EXPR
2395     *  `--ASSIGN -&gt; =
2396     *      |--DOT -&gt; .
2397     *      |   |--LITERAL_THIS -&gt; this
2398     *      |   `--IDENT -&gt; name
2399     *      `--IDENT -&gt; name
2400     * SEMI -&gt; ;
2401     * </pre>
2402     *
2403     * <p>Also consider:</p>
2404     * <pre>
2405     * this(1, "NULL");
2406     * </pre>
2407     *
2408     * <p>parses as:</p>
2409     * <pre>
2410     * CTOR_CALL -&gt; this
2411     *  |--LPAREN -&gt; (
2412     *  |--ELIST -&gt; ELIST
2413     *  |   |--EXPR -&gt; EXPR
2414     *  |   |   `--NUM_INT -&gt; 1
2415     *  |   |--COMMA -&gt; ,
2416     *  |   `--EXPR -&gt; EXPR
2417     *  |       `--STRING_LITERAL -&gt; "NULL"
2418     *  |--RPAREN -&gt; )
2419     *  `--SEMI -&gt; ;
2420     * </pre>
2421     *
2422     * @see #EXPR
2423     * @see #CTOR_CALL
2424     **/
2425    public static final int LITERAL_THIS =
2426        JavaLanguageLexer.LITERAL_THIS;
2427
2428    /**
2429     * The {@code super} keyword.
2430     *
2431     * <p>For example:</p>
2432     * <pre>
2433     * super.toString()ï¼›
2434     * </pre>
2435     *
2436     * <p>parses as:</p>
2437     * <pre>
2438     * |--EXPR -&gt; EXPR
2439     * |   `--METHOD_CALL -&gt; (
2440     * |       |--DOT -&gt; .
2441     * |       |  |--LITERAL_SUPER -&gt; super
2442     * |       |  `--IDENT -&gt; toString
2443     * |       |--ELIST -&gt; ELIST
2444     * |       `--RPAREN -&gt; )
2445     * |--SEMI -&gt; ;
2446     * </pre>
2447     *
2448     * @see #EXPR
2449     * @see #SUPER_CTOR_CALL
2450     **/
2451    public static final int LITERAL_SUPER =
2452        JavaLanguageLexer.LITERAL_SUPER;
2453
2454    /**
2455     * The {@code =} (assignment) operator.
2456     *
2457     * <p>For example:</p>
2458     * <pre>
2459     * a = b;
2460     * </pre>
2461     *
2462     * <p>parses as:</p>
2463     * <pre>
2464     * |--EXPR -&gt; EXPR
2465     * |   `--ASSIGN -&gt; =
2466     * |       |--IDENT -&gt; a
2467     * |       `--IDENT -&gt; b
2468     * |--SEMI -&gt; ;
2469     * </pre>
2470     *
2471     * @see <a
2472     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.26.1">Java
2473     *     Language Specification, &sect;15.26.1</a>
2474     * @see #EXPR
2475     **/
2476    public static final int ASSIGN = JavaLanguageLexer.ASSIGN;
2477    /**
2478     * The {@code throws} keyword.  The children are a number of
2479     * one or more identifiers separated by commas.
2480     *
2481     * <p>For example:</p>
2482     * <pre>
2483     * void test() throws FileNotFoundException, EOFException {
2484     * }
2485     * </pre>
2486     *
2487     * <p>parses as:</p>
2488     * <pre>
2489     * METHOD_DEF -&gt; METHOD_DEF
2490     *  |--MODIFIERS -&gt; MODIFIERS
2491     *  |--TYPE -&gt; TYPE
2492     *  |   `--LITERAL_VOID -&gt; void
2493     *  |--IDENT -&gt; test
2494     *  |--LPAREN -&gt; (
2495     *  |--PARAMETERS -&gt; PARAMETERS
2496     *  |--RPAREN -&gt; )
2497     *  |--LITERAL_THROWS -&gt; throws
2498     *  |   |--IDENT -&gt; FileNotFoundException
2499     *  |   |--COMMA -&gt; ,
2500     *  |   `--IDENT -&gt; EOFException
2501     *  `--SLIST -&gt; {
2502     *      `--RCURLY -&gt; }
2503     * </pre>
2504     *
2505     * @see <a
2506     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.4.4">Java
2507     *     Language Specification, &sect;8.4.4</a>
2508     * @see #IDENT
2509     * @see #DOT
2510     * @see #COMMA
2511     * @see #METHOD_DEF
2512     * @see #CTOR_DEF
2513     * @see FullIdent
2514     **/
2515    public static final int LITERAL_THROWS =
2516        JavaLanguageLexer.LITERAL_THROWS;
2517
2518    /**
2519     * The {@code :} (colon) operator.  This will appear as part
2520     * of the conditional operator ({@code ? :}).
2521     *
2522     * <p>For example:</p>
2523     * <pre>
2524     * num = isValid ? 1 : 0;
2525     * </pre>
2526     *
2527     * <p>parses as:</p>
2528     * <pre>
2529     * |--EXPR -&gt; EXPR
2530     * |   `--ASSIGN -&gt; =
2531     * |       |--IDENT -&gt; num
2532     * |       `--QUESTION -&gt; ?
2533     * |           |--IDENT -&gt; isValid
2534     * |           |--NUM_INT -&gt; 1
2535     * |           |--COLON -&gt; :
2536     * |           `--NUM_INT -&gt; 0
2537     * |--SEMI -&gt; ;
2538     * </pre>
2539     *
2540     * @see #QUESTION
2541     * @see #LABELED_STAT
2542     * @see #CASE_GROUP
2543     **/
2544    public static final int COLON = JavaLanguageLexer.COLON;
2545
2546    /**
2547     * The {@code ::} (double colon) separator.
2548     * It is part of Java 8 syntax that is used for method reference.
2549     * The token does not appear in tree, {@link #METHOD_REF} should be used instead.
2550     *
2551     * <p>For example:</p>
2552     * <pre>
2553     * Function&lt;Double, Double&gt; square = MyClass::square;
2554     * </pre>
2555     *
2556     * <p>parses as:</p>
2557     * <pre>
2558     * VARIABLE_DEF -&gt; VARIABLE_DEF
2559     *  |--MODIFIERS -&gt; MODIFIERS
2560     *  |--TYPE -&gt; TYPE
2561     *  |   |--IDENT -&gt; Function
2562     *  |   |   `--TYPE_ARGUMENTS -&gt; TYPE_ARGUMENTS
2563     *  |   |       |--GENERIC_START -&gt; &lt;
2564     *  |   |       |--TYPE_ARGUMENT -&gt; TYPE_ARGUMENT
2565     *  |   |       |   `--IDENT -&gt; Double
2566     *  |   |       |--COMMA -&gt; ,
2567     *  |   |       |--TYPE_ARGUMENT -&gt; TYPE_ARGUMENT
2568     *  |   |       |   `--IDENT -&gt; Double
2569     *  |   |       `--GENERIC_END -&gt; &gt;
2570     *  |   |--IDENT -&gt; square
2571     *  |   |--ASSIGN -&gt; =
2572     *  |   |   `--EXPR -&gt; EXPR
2573     *  |   |       `--METHOD_REF -&gt; ::
2574     *  |   |           |--IDENT -&gt; MyClass
2575     *  |   |           `--IDENT -&gt; square
2576     *  |   `--SEMI -&gt; ;
2577     * </pre>
2578     *
2579     * @see #METHOD_REF
2580     */
2581    public static final int DOUBLE_COLON = JavaLanguageLexer.DOUBLE_COLON;
2582    /**
2583     * The {@code if} keyword.
2584     *
2585     * <p>For example:</p>
2586     * <pre>
2587     * if (optimistic)
2588     * {
2589     *   message = "half full";
2590     * }
2591     * else
2592     * {
2593     *   message = "half empty";
2594     * }
2595     * </pre>
2596     *
2597     * <p>parses as:</p>
2598     * <pre>
2599     * LITERAL_IF -&gt; if
2600     *  |--LPAREN -&gt; (
2601     *  |--EXPR -&gt; EXPR
2602     *  |   `--IDENT -&gt; optimistic
2603     *  |--RPAREN -&gt; )
2604     *  |--SLIST -&gt; {
2605     *  |   |--EXPR -&gt; EXPR
2606     *  |   |   `--ASSIGN -&gt; =
2607     *  |   |       |--IDENT -&gt; message
2608     *  |   |       `--STRING_LITERAL -&gt; "half full"
2609     *  |   |--SEMI -&gt; ;
2610     *  |   `--RCURLY -&gt; }
2611     *  `--LITERAL_ELSE -&gt; else
2612     *      `--SLIST -&gt; {
2613     *          |--EXPR -&gt; EXPR
2614     *          |   `--ASSIGN -&gt; =
2615     *          |       |--IDENT -&gt; message
2616     *          |       `--STRING_LITERAL -&gt; "half empty"
2617     *          |--SEMI -&gt; ;
2618     *          `--RCURLY -&gt; }
2619     * </pre>
2620     *
2621     * @see #LPAREN
2622     * @see #EXPR
2623     * @see #RPAREN
2624     * @see #SLIST
2625     * @see #EMPTY_STAT
2626     * @see #LITERAL_ELSE
2627     **/
2628    public static final int LITERAL_IF = JavaLanguageLexer.LITERAL_IF;
2629    /**
2630     * The {@code for} keyword.  The children are {@code (},
2631     * an initializer, a condition, an iterator, a {@code )} and
2632     * either a statement list, a single expression, or an empty
2633     * statement.
2634     *
2635     * <p>For example:</p>
2636     * <pre>
2637     * for (int i = 0; i &lt; arr.length; i++) {}
2638     * </pre>
2639     *
2640     * <p>parses as:</p>
2641     * <pre>
2642     * LITERAL_FOR -&gt; for
2643     *  |--LPAREN -&gt; (
2644     *  |--FOR_INIT -&gt; FOR_INIT
2645     *  |   `--VARIABLE_DEF -&gt; VARIABLE_DEF
2646     *  |       |--MODIFIERS -&gt; MODIFIERS
2647     *  |       |--TYPE -&gt; TYPE
2648     *  |       |   `--LITERAL_INT -&gt; int
2649     *  |       |--IDENT -&gt; i
2650     *  |       `--ASSIGN -&gt; =
2651     *  |           `--EXPR -&gt; EXPR
2652     *  |               `--NUM_INT -&gt; 0
2653     *  |--SEMI -&gt; ;
2654     *  |--FOR_CONDITION -&gt; FOR_CONDITION
2655     *  |   `--EXPR -&gt; EXPR
2656     *  |       `--LT -&gt; &lt;
2657     *  |           |--IDENT -&gt; i
2658     *  |           `--DOT -&gt; .
2659     *  |               |--IDENT -&gt; arr
2660     *  |               `--IDENT -&gt; length
2661     *  |--SEMI -&gt; ;
2662     *  |--FOR_ITERATOR -&gt; FOR_ITERATOR
2663     *  |   `--ELIST -&gt; ELIST
2664     *  |       `--EXPR -&gt; EXPR
2665     *  |           `--POST_INC -&gt; ++
2666     *  |               `--IDENT -&gt; i
2667     *  |--RPAREN -&gt; )
2668     *  `--SLIST -&gt; {
2669     *      `--RCURLY -&gt; }
2670     * </pre>
2671     *
2672     * @see #LPAREN
2673     * @see #FOR_INIT
2674     * @see #SEMI
2675     * @see #FOR_CONDITION
2676     * @see #FOR_ITERATOR
2677     * @see #RPAREN
2678     * @see #SLIST
2679     * @see #EMPTY_STAT
2680     * @see #EXPR
2681     **/
2682    public static final int LITERAL_FOR = JavaLanguageLexer.LITERAL_FOR;
2683    /**
2684     * The {@code while} keyword.
2685     *
2686     * <p>For example:</p>
2687     * <pre>
2688     * while (i &lt; 5) {
2689     *     i++;
2690     * }
2691     * </pre>
2692     *
2693     * <p>parses as:</p>
2694     * <pre>
2695     * LITERAL_WHILE -&gt; while
2696     *  |--LPAREN -&gt; (
2697     *  |--EXPR -&gt; EXPR
2698     *  |   `--LT -&gt; &lt;
2699     *  |       |--IDENT -&gt; i
2700     *  |       `--NUM_INT -&gt; 5
2701     *  |--RPAREN -&gt; )
2702     *  `--SLIST -&gt; {
2703     *      |--EXPR -&gt; EXPR
2704     *      |   `--POST_INC -&gt; ++
2705     *      |       `--IDENT -&gt; i
2706     *      |--SEMI -&gt; ;
2707     *      `--RCURLY -&gt; }
2708     * </pre>
2709     **/
2710    public static final int LITERAL_WHILE =
2711        JavaLanguageLexer.LITERAL_WHILE;
2712
2713    /**
2714     * The {@code do} keyword.  Note that the while token does not
2715     * appear as part of the do-while construct.
2716     *
2717     * <p>For example:</p>
2718     * <pre>
2719     * do {
2720     *   x = rand.nextInt();
2721     * } while (x &lt; 5);
2722     * </pre>
2723     *
2724     * <p>parses as:</p>
2725     * <pre>
2726     * LITERAL_DO -&gt; do
2727     *  |--SLIST -&gt; {
2728     *  |   |--EXPR -&gt; EXPR
2729     *  |   |   `--ASSIGN -&gt; =
2730     *  |   |       |--IDENT -&gt; x
2731     *  |   |       `--METHOD_CALL -&gt; (
2732     *  |   |           |--DOT -&gt; .
2733     *  |   |           |   |--IDENT -&gt; rand
2734     *  |   |           |   `--IDENT -&gt; nextInt
2735     *  |   |           |--ELIST -&gt; ELIST
2736     *  |   |           `--RPAREN -&gt; )
2737     *  |   |--SEMI -&gt; ;
2738     *  |   `--RCURLY -&gt; }
2739     *  |--DO_WHILE -&gt; while
2740     *  |--LPAREN -&gt; (
2741     *  |--EXPR -&gt; EXPR
2742     *  |   `--LT -&gt; &lt;
2743     *  |       |--IDENT -&gt; x
2744     *  |       `--NUM_INT -&gt; 5
2745     *  |--RPAREN -&gt; )
2746     *  `--SEMI -&gt; ;
2747     * </pre>
2748     *
2749     * @see #SLIST
2750     * @see #EXPR
2751     * @see #EMPTY_STAT
2752     * @see #LPAREN
2753     * @see #RPAREN
2754     * @see #SEMI
2755     **/
2756    public static final int LITERAL_DO = JavaLanguageLexer.LITERAL_DO;
2757    /**
2758     * Literal {@code while} in do-while loop.
2759     *
2760     * <p>For example:</p>
2761     * <pre>
2762     * do {
2763     *
2764     * } while (a &gt; 0);
2765     * </pre>
2766     *
2767     * <p>parses as:</p>
2768     * <pre>
2769     * --LITERAL_DO -&gt; do
2770     *    |--SLIST -&gt; {
2771     *    |   `--RCURLY -&gt; }
2772     *    |--DO_WHILE -&gt; while
2773     *    |--LPAREN -&gt; (
2774     *    |--EXPR -&gt; EXPR
2775     *    |   `--GT -&gt; &gt;
2776     *    |       |--IDENT -&gt; a
2777     *    |       `--NUM_INT -&gt; 0
2778     *    |--RPAREN -&gt; )
2779     *    `--SEMI -&gt; ;
2780     * </pre>
2781     *
2782     * @see #LITERAL_DO
2783     */
2784    public static final int DO_WHILE = JavaLanguageLexer.DO_WHILE;
2785    /**
2786     * The {@code break} keyword.  The first child is an optional
2787     * identifier and the last child is a semicolon.
2788     *
2789     * <p>For example:</p>
2790     * <pre>
2791     * for (;;) {
2792     *     break;
2793     * }
2794     * </pre>
2795     *
2796     * <p>parses as:</p>
2797     * <pre>
2798     * LITERAL_FOR -&gt; for
2799     *  |--LPAREN -&gt; (
2800     *  |--FOR_INIT -&gt; FOR_INIT
2801     *  |--SEMI -&gt; ;
2802     *  |--FOR_CONDITION -&gt; FOR_CONDITION
2803     *  |--SEMI -&gt; ;
2804     *  |--FOR_ITERATOR -&gt; FOR_ITERATOR
2805     *  |--RPAREN -&gt; )
2806     *  `--SLIST -&gt; {
2807     *      |--LITERAL_BREAK -&gt; break
2808     *      |   `--SEMI -&gt; ;
2809     *      `--RCURLY -&gt; }
2810     * </pre>
2811     *
2812     * @see #IDENT
2813     * @see #SEMI
2814     * @see #SLIST
2815     **/
2816    public static final int LITERAL_BREAK =
2817        JavaLanguageLexer.LITERAL_BREAK;
2818
2819    /**
2820     * The {@code continue} keyword.  The first child is an
2821     * optional identifier and the last child is a semicolon.
2822     *
2823     * <p>For example:</p>
2824     * <pre>
2825     * for (;;) {
2826     *     continue;
2827     * }
2828     * </pre>
2829     *
2830     * <p>parses as:</p>
2831     * <pre>
2832     * LITERAL_FOR -&gt; for
2833     *  |--LPAREN -&gt; (
2834     *  |--FOR_INIT -&gt; FOR_INIT
2835     *  |--SEMI -&gt; ;
2836     *  |--FOR_CONDITION -&gt; FOR_CONDITION
2837     *  |--SEMI -&gt; ;
2838     *  |--FOR_ITERATOR -&gt; FOR_ITERATOR
2839     *  |--RPAREN -&gt; )
2840     *  `--SLIST -&gt; {
2841     *      |--LITERAL_CONTINUE -&gt; continue
2842     *      |   `--SEMI -&gt; ;
2843     *      `--RCURLY -&gt; }
2844     * </pre>
2845     *
2846     * @see #IDENT
2847     * @see #SEMI
2848     * @see #SLIST
2849     **/
2850    public static final int LITERAL_CONTINUE =
2851        JavaLanguageLexer.LITERAL_CONTINUE;
2852
2853    /**
2854     * The {@code return} keyword.  The first child is an
2855     * optional expression for the return value.  The last child is a
2856     * semicolon.
2857     *
2858     * <p>For example:</p>
2859     * <pre>
2860     * public int foo(int i) {
2861     *     return i+1;
2862     * }
2863     * </pre>
2864     *
2865     * <p>parses as:</p>
2866     * <pre>
2867     * METHOD_DEF -&gt; METHOD_DEF
2868     *  |--MODIFIERS -&gt; MODIFIERS
2869     *  |   `--LITERAL_PUBLIC -&gt; public
2870     *  |--TYPE -&gt; TYPE
2871     *  |   `--LITERAL_INT -&gt; int
2872     *  |--IDENT -&gt; foo
2873     *  |--LPAREN -&gt; (
2874     *  |--PARAMETERS -&gt; PARAMETERS
2875     *  |   `--PARAMETER_DEF -&gt; PARAMETER_DEF
2876     *  |       |--MODIFIERS -&gt; MODIFIERS
2877     *  |       |--TYPE -&gt; TYPE
2878     *  |       |   `--LITERAL_INT -&gt; int
2879     *  |       `--IDENT -&gt; i
2880     *  |--RPAREN -&gt; )
2881     *  `--SLIST -&gt; {
2882     *      |--LITERAL_RETURN -&gt; return
2883     *      |   |--EXPR -&gt; EXPR
2884     *      |   |   `--PLUS -&gt; +
2885     *      |   |       |--IDENT -&gt; i
2886     *      |   |       `--NUM_INT -&gt; 1
2887     *      |   `--SEMI -&gt; ;
2888     *      `--RCURLY -&gt; }
2889     * </pre>
2890     *
2891     * @see #EXPR
2892     * @see #SEMI
2893     * @see #SLIST
2894     **/
2895    public static final int LITERAL_RETURN =
2896        JavaLanguageLexer.LITERAL_RETURN;
2897
2898    /**
2899     * The {@code switch} keyword.
2900     *
2901     * <p>For example:</p>
2902     * <pre>
2903     * switch (type) {
2904     *      case 0:
2905     *          background = Color.red;
2906     *          break;
2907     *      case 1:
2908     *          background = Color.blue;
2909     *          break;
2910     *      default:
2911     *          background = Color.green;
2912     * }
2913     * </pre>
2914     *
2915     * <p>parses as:</p>
2916     * <pre>
2917     * LITERAL_SWITCH -&gt; switch
2918     *  |--LPAREN -&gt; (
2919     *  |--EXPR -&gt; EXPR
2920     *  |   `--IDENT -&gt; type
2921     *  |--RPAREN -&gt; )
2922     *  |--LCURLY -&gt; {
2923     *  |--CASE_GROUP -&gt; CASE_GROUP
2924     *  |   |--LITERAL_CASE -&gt; case
2925     *  |   |   |--EXPR -&gt; EXPR
2926     *  |   |   |   `--NUM_INT -&gt; 0
2927     *  |   |   `--COLON -&gt; :
2928     *  |   `--SLIST -&gt; SLIST
2929     *  |       |--EXPR -&gt; EXPR
2930     *  |       |   `--ASSIGN -&gt; =
2931     *  |       |       |--IDENT -&gt; background
2932     *  |       |       `--DOT -&gt; .
2933     *  |       |           |--IDENT -&gt; Color
2934     *  |       |           `--IDENT -&gt; red
2935     *  |       |--SEMI -&gt; ;
2936     *  |       `--LITERAL_BREAK -&gt; break
2937     *  |           `--SEMI -&gt; ;
2938     *  |--CASE_GROUP -&gt; CASE_GROUP
2939     *  |   |--LITERAL_CASE -&gt; case
2940     *  |   |   |--EXPR -&gt; EXPR
2941     *  |   |   |   `--NUM_INT -&gt; 1
2942     *  |   |   `--COLON -&gt; :
2943     *  |   `--SLIST -&gt; SLIST
2944     *  |       |--EXPR -&gt; EXPR
2945     *  |       |   `--ASSIGN -&gt; =
2946     *  |       |       |--IDENT -&gt; background
2947     *  |       |       `--DOT -&gt; .
2948     *  |       |           |--IDENT -&gt; Color
2949     *  |       |           `--IDENT -&gt; blue
2950     *  |       |--SEMI -&gt; ;
2951     *  |       `--LITERAL_BREAK -&gt; break
2952     *  |           `--SEMI -&gt; ;
2953     *  |--CASE_GROUP -&gt; CASE_GROUP
2954     *  |   |--LITERAL_DEFAULT -&gt; default
2955     *  |   |   `--COLON -&gt; :
2956     *  |   `--SLIST -&gt; SLIST
2957     *  |       |--EXPR -&gt; EXPR
2958     *  |       |   `--ASSIGN -&gt; =
2959     *  |       |       |--IDENT -&gt; background
2960     *  |       |       `--DOT -&gt; .
2961     *  |       |           |--IDENT -&gt; Color
2962     *  |       |           `--IDENT -&gt; green
2963     *  |       `--SEMI -&gt; ;
2964     *  `--RCURLY -&gt; }
2965     * </pre>
2966     *
2967     * @see <a
2968     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.10">Java
2969     *     Language Specification, &sect;14.10</a>
2970     * @see #LPAREN
2971     * @see #EXPR
2972     * @see #RPAREN
2973     * @see #LCURLY
2974     * @see #CASE_GROUP
2975     * @see #RCURLY
2976     * @see #SLIST
2977     * @see #SWITCH_RULE
2978     **/
2979    public static final int LITERAL_SWITCH =
2980        JavaLanguageLexer.LITERAL_SWITCH;
2981
2982    /**
2983     * The {@code throw} keyword.  The first child is an
2984     * expression that evaluates to a {@code Throwable} instance.
2985     *
2986     * <p>For example:</p>
2987     * <pre>
2988     * throw new ArithmeticException(&quot;An exception occurred.&quot;);
2989     * </pre>
2990     *
2991     * <p>parses as:</p>
2992     * <pre>
2993     * LITERAL_THROW -&gt; throw
2994     *  |--EXPR -&gt; EXPR
2995     *  |   `--LITERAL_NEW -&gt; new
2996     *  |       |--IDENT -&gt; ArithmeticException
2997     *  |       |--LPAREN -&gt; (
2998     *  |       |--ELIST -&gt; ELIST
2999     *  |       |   `--EXPR -&gt; EXPR
3000     *  |       |       `--STRING_LITERAL -&gt; &quot;An exception occurred.&quot;
3001     *  |       `--RPAREN -&gt; )
3002     *  `--SEMI -&gt; ;
3003     * </pre>
3004     *
3005     * @see <a
3006     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.17">Java
3007     *     Language Specification, &sect;14.17</a>
3008     * @see #SLIST
3009     * @see #EXPR
3010     **/
3011    public static final int LITERAL_THROW =
3012        JavaLanguageLexer.LITERAL_THROW;
3013
3014    /**
3015     * The {@code else} keyword.  This appears as a child of an
3016     * {@code if} statement.
3017     *
3018     * <p>For example:</p>
3019     * <pre>
3020     * if (flag) {
3021     *
3022     * } else {
3023     *
3024     * }
3025     * </pre>
3026     *
3027     * <p>parses as:</p>
3028     * <pre>
3029     * LITERAL_IF -&gt; if
3030     *  |--LPAREN -&gt; (
3031     *  |--EXPR -&gt; EXPR
3032     *  |   `--IDENT -&gt; flag
3033     *  |--RPAREN -&gt; )
3034     *  |--SLIST -&gt; {
3035     *  |   `--RCURLY -&gt; }
3036     *  `--LITERAL_ELSE -&gt; else
3037     *      `--SLIST -&gt; {
3038     *          `--RCURLY -&gt; }
3039     * </pre>
3040     *
3041     * @see #SLIST
3042     * @see #EXPR
3043     * @see #EMPTY_STAT
3044     * @see #LITERAL_IF
3045     **/
3046    public static final int LITERAL_ELSE =
3047        JavaLanguageLexer.LITERAL_ELSE;
3048
3049    /**
3050     * The {@code case} keyword.  The first child is a constant
3051     * expression that evaluates to an integer.
3052     *
3053     * <p>For example:</p>
3054     * <pre>
3055     * switch(num){
3056     *    case 0:
3057     *      num = 1;
3058     * }
3059     * </pre>
3060     *
3061     * <p>parses as:</p>
3062     * <pre>
3063     *
3064     * CASE_GROUP -&gt; CASE_GROUP
3065     *    |--LITERAL_CASE -&gt; cas
3066     *    |   |--EXPR -&gt; EXPR
3067     *    |   |   `--NUM_INT -&gt; 0
3068     *    |   `--COLON -&gt; :
3069     *    `--SLIST -&gt; SLIST
3070     *         |--EXPR -&gt; EXPR
3071     *         |   `--ASSIGN -&gt; =
3072     *         |       |--IDENT -&gt; num
3073     *         |       `--NUM_INT -&gt; 1
3074     *         `--SEMI -&gt; ;
3075     * </pre>
3076     *
3077     * <p>For example:</p>
3078     * <pre>
3079     * switch(num){
3080     *    case 1 -&gt; num = -1
3081     * }
3082     * </pre>
3083     *
3084     * <p>parses as:</p>
3085     * <pre>
3086     * SWITCH_RULE -&gt; SWITCH_RULE
3087     *   |--LITERAL_CASE -&gt; case
3088     *   |   `--EXPR -&gt; EXPR
3089     *   |       `--NUM_INT -&gt; 1
3090     *   |--LAMBDA -&gt; -&gt;
3091     *   |--EXPR -&gt; EXPR
3092     *   |   `--ASSIGN -&gt; =
3093     *   |       |--IDENT -&gt; num
3094     *   |       `--UNARY_MINUS -&gt; -
3095     *   |           `--NUM_INT -&gt; 1
3096     *   `--SEMI -&gt; ;
3097     * </pre>
3098     *
3099     * @see #CASE_GROUP
3100     * @see #EXPR
3101     **/
3102    public static final int LITERAL_CASE =
3103        JavaLanguageLexer.LITERAL_CASE;
3104
3105    /**
3106     * The {@code default} keyword.  This element has no
3107     * children.
3108     *
3109     * <p>For example:</p>
3110     * <pre>
3111     * switch (type) {
3112     *   case 1:
3113     *     x = 1;
3114     *     break;
3115     *   default:
3116     *     x = 3;
3117     * }
3118     * </pre>
3119     *
3120     * <p>parses as:</p>
3121     * <pre>
3122     * LITERAL_SWITCH -&gt; switch
3123     *  |--LPAREN -&gt; (
3124     *  |--EXPR -&gt; EXPR
3125     *  |   `--IDENT -&gt; type
3126     *  |--RPAREN -&gt; )
3127     *  |--LCURLY -&gt; {
3128     *  |--CASE_GROUP -&gt; CASE_GROUP
3129     *  |   |--LITERAL_CASE -&gt; case
3130     *  |   |   |--EXPR -&gt; EXPR
3131     *  |   |   |   `--NUM_INT -&gt; 1
3132     *  |   |   `--COLON -&gt; :
3133     *  |   `--SLIST -&gt; SLIST
3134     *  |       |--EXPR -&gt; EXPR
3135     *  |       |   `--ASSIGN -&gt; =
3136     *  |       |       |--IDENT -&gt; x
3137     *  |       |       `--NUM_INT -&gt; 1
3138     *  |       |   |       |--SEMI -&gt; ;
3139     *  |       `--LITERAL_BREAK -&gt; break
3140     *  |           `--SEMI -&gt; ;
3141     *  |--CASE_GROUP -&gt; CASE_GROUP
3142     *  |   |--LITERAL_DEFAULT -&gt; default
3143     *  |   |   `--COLON -&gt; :
3144     *  |   `--SLIST -&gt; SLIST
3145     *  |       |--EXPR -&gt; EXPR
3146     *  |       |   `--ASSIGN -&gt; =
3147     *  |       |       |--IDENT -&gt; x
3148     *  |       |       `--NUM_INT -&gt; 3
3149     *  |       `--SEMI -&gt; ;
3150     *  `--RCURLY -&gt; }
3151     * </pre>
3152     *
3153     * @see #CASE_GROUP
3154     * @see #MODIFIERS
3155     * @see #SWITCH_RULE
3156     **/
3157    public static final int LITERAL_DEFAULT =
3158        JavaLanguageLexer.LITERAL_DEFAULT;
3159
3160    /**
3161     * The {@code try} keyword.  The children are a statement
3162     * list, zero or more catch blocks and then an optional finally
3163     * block.
3164     *
3165     * <p>For example:</p>
3166     * <pre>
3167     * try { } finally {}
3168     * </pre>
3169     *
3170     * <p>parses as:</p>
3171     * <pre>
3172     * LITERAL_TRY -&gt; try
3173     *  |--SLIST -&gt; {
3174     *  |   `--RCURLY -&gt; }
3175     *  `--LITERAL_FINALLY -&gt; finally
3176     *      `--SLIST -&gt; {
3177     *          `--RCURLY -&gt; }
3178     * </pre>
3179     *
3180     * @see <a
3181     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.19">Java
3182     *     Language Specification, &sect;14.19</a>
3183     * @see #SLIST
3184     * @see #LITERAL_CATCH
3185     * @see #LITERAL_FINALLY
3186     **/
3187    public static final int LITERAL_TRY = JavaLanguageLexer.LITERAL_TRY;
3188
3189    /**
3190     * The Java 7 try-with-resources construct.
3191     *
3192     * <p>For example:</p>
3193     * <pre>
3194     * try (Foo foo = new Foo(); Bar bar = new Bar()) {
3195     * }
3196     * </pre>
3197     *
3198     * <p>parses as:</p>
3199     * <pre>
3200     * LITERAL_TRY -&gt; try
3201     *  |--RESOURCE_SPECIFICATION -&gt; RESOURCE_SPECIFICATION
3202     *  |   |--LPAREN -&gt; (
3203     *  |   |--RESOURCES -&gt; RESOURCES
3204     *  |   |   |--RESOURCE -&gt; RESOURCE
3205     *  |   |   |   |--MODIFIERS -&gt; MODIFIERS
3206     *  |   |   |   |--TYPE -&gt; TYPE
3207     *  |   |   |   |   `--IDENT -&gt; Foo
3208     *  |   |   |   |--IDENT -&gt; foo
3209     *  |   |   |   `--ASSIGN -&gt; =
3210     *  |   |   |       `--EXPR -&gt; EXPR
3211     *  |   |   |           `--LITERAL_NEW -&gt; new
3212     *  |   |   |               |--IDENT -&gt; Foo
3213     *  |   |   |               |--LPAREN -&gt; (
3214     *  |   |   |               |--ELIST -&gt; ELIST
3215     *  |   |   |               `--RPAREN -&gt; )
3216     *  |   |   |--SEMI -&gt; ;
3217     *  |   |   `--RESOURCE -&gt; RESOURCE
3218     *  |   |       |--MODIFIERS -&gt; MODIFIERS
3219     *  |   |       |--TYPE -&gt; TYPE
3220     *  |   |       |   `--IDENT -&gt; Bar
3221     *  |   |       |--IDENT -&gt; bar
3222     *  |   |       `--ASSIGN -&gt; =
3223     *  |   |           `--EXPR -&gt; EXPR
3224     *  |   |               `--LITERAL_NEW -&gt; new
3225     *  |   |                   |--IDENT -&gt; Bar
3226     *  |   |                   |--LPAREN -&gt; (
3227     *  |   |                   |--ELIST -&gt; ELIST
3228     *  |   |                   `--RPAREN -&gt; )
3229     *  |   `--RPAREN -&gt; )
3230     *  `--SLIST -&gt; {
3231     *      `--RCURLY -&gt; }
3232     * </pre>
3233     *
3234     * <p>Also consider:</p>
3235     * <pre>
3236     * try (BufferedReader br = new BufferedReader(new FileReader(path))) {
3237     * }
3238     * </pre>
3239     *
3240     * <p>which parses as:</p>
3241     * <pre>
3242     * LITERAL_TRY -&gt; try
3243     *  |--RESOURCE_SPECIFICATION -&gt; RESOURCE_SPECIFICATION
3244     *  |   |--LPAREN -&gt; (
3245     *  |   |--RESOURCES -&gt; RESOURCES
3246     *  |   |   `--RESOURCE -&gt; RESOURCE
3247     *  |   |       |--MODIFIERS -&gt; MODIFIERS
3248     *  |   |       |--TYPE -&gt; TYPE
3249     *  |   |       |   `--IDENT -&gt; BufferedReader
3250     *  |   |       |--IDENT -&gt; br
3251     *  |   |       `--ASSIGN -&gt; =
3252     *  |   |           `--EXPR -&gt; EXPR
3253     *  |   |               `--LITERAL_NEW -&gt; new
3254     *  |   |                   |--IDENT -&gt; BufferedReader
3255     *  |   |                   |--LPAREN -&gt; (
3256     *  |   |                   |--ELIST -&gt; ELIST
3257     *  |   |                   |   `--EXPR -&gt; EXPR
3258     *  |   |                   |       `--LITERAL_NEW -&gt; new
3259     *  |   |                   |           |--IDENT -&gt; FileReader
3260     *  |   |                   |           |--LPAREN -&gt; (
3261     *  |   |                   |           |--ELIST -&gt; ELIST
3262     *  |   |                   |           |   `--EXPR -&gt; EXPR
3263     *  |   |                   |           |       `--IDENT -&gt; path
3264     *  |   |                   |           `--RPAREN -&gt; )
3265     *  |   |                   `--RPAREN -&gt; )
3266     *  |   `--RPAREN -&gt; )
3267     *  `--SLIST -&gt; {
3268     *      `--RCURLY -&gt; }
3269     * </pre>
3270     *
3271     * @see #LPAREN
3272     * @see #RESOURCES
3273     * @see #RESOURCE
3274     * @see #SEMI
3275     * @see #RPAREN
3276     * @see #LITERAL_TRY
3277     **/
3278    public static final int RESOURCE_SPECIFICATION =
3279        JavaLanguageLexer.RESOURCE_SPECIFICATION;
3280
3281    /**
3282     * A list of resources in the Java 7 try-with-resources construct.
3283     * This is a child of RESOURCE_SPECIFICATION.
3284     *
3285     * <p>For example:</p>
3286     * <pre>
3287     *     try (FileReader fr = new FileReader("config.xml")) {
3288     *     } finally {}
3289     * </pre>
3290     *
3291     * <p>parses as:</p>
3292     * <pre>
3293     * LITERAL_TRY -&gt; try
3294     *  |--RESOURCE_SPECIFICATION -&gt; RESOURCE_SPECIFICATION
3295     *  |   |--LPAREN -&gt; (
3296     *  |   |--RESOURCES -&gt; RESOURCES
3297     *  |   |   `--RESOURCE -&gt; RESOURCE
3298     *  |   |       |--MODIFIERS -&gt; MODIFIERS
3299     *  |   |       |--TYPE -&gt; TYPE
3300     *  |   |       |   `--IDENT -&gt; FileReader
3301     *  |   |       |--IDENT -&gt; fr
3302     *  |   |       `--ASSIGN -&gt; =
3303     *  |   |           `--EXPR -&gt; EXPR
3304     *  |   |               `--LITERAL_NEW -&gt; new
3305     *  |   |                   |--IDENT -&gt; FileReader
3306     *  |   |                   |--LPAREN -&gt; (
3307     *  |   |                   |--ELIST -&gt; ELIST
3308     *  |   |                   |   `--EXPR -&gt; EXPR
3309     *  |   |                   |       `--STRING_LITERAL -&gt; "config.xml"
3310     *  |   |                   `--RPAREN -&gt; )
3311     *  |   `--RPAREN -&gt; )
3312     *  |--SLIST -&gt; {
3313     *  |   `--RCURLY -&gt; }
3314     *  `--LITERAL_FINALLY -&gt; finally
3315     *      `--SLIST -&gt; {
3316     *          `--RCURLY -&gt; }
3317     * </pre>
3318     *
3319     * @see #RESOURCE_SPECIFICATION
3320     **/
3321    public static final int RESOURCES =
3322        JavaLanguageLexer.RESOURCES;
3323
3324    /**
3325     * A resource in the Java 7 try-with-resources construct.
3326     * This is a child of RESOURCES.
3327     *
3328     * <p>For example:</p>
3329     * <pre>
3330     * try (Foo foo = new Foo(); Bar bar = new Bar()) { }
3331     * </pre>
3332     *
3333     * <p>parses as:</p>
3334     * <pre>
3335     * LITERAL_TRY -&gt; try
3336     *  |--RESOURCE_SPECIFICATION -&gt; RESOURCE_SPECIFICATION
3337     *  |   |--LPAREN -&gt; (
3338     *  |   |--RESOURCES -&gt; RESOURCES
3339     *  |   |   |--RESOURCE -&gt; RESOURCE
3340     *  |   |   |   |--MODIFIERS -&gt; MODIFIERS
3341     *  |   |   |   |--TYPE -&gt; TYPE
3342     *  |   |   |   |   `--IDENT -&gt; Foo
3343     *  |   |   |   |--IDENT -&gt; foo
3344     *  |   |   |   `--ASSIGN -&gt; =
3345     *  |   |   |       `--EXPR -&gt; EXPR
3346     *  |   |   |           `--LITERAL_NEW -&gt; new
3347     *  |   |   |               |--IDENT -&gt; Foo
3348     *  |   |   |               |--LPAREN -&gt; (
3349     *  |   |   |               |--ELIST -&gt; ELIST
3350     *  |   |   |               `--RPAREN -&gt; )
3351     *  |   |   |--SEMI -&gt; ;
3352     *  |   |   `--RESOURCE -&gt; RESOURCE
3353     *  |   |       |--MODIFIERS -&gt; MODIFIERS
3354     *  |   |       |--TYPE -&gt; TYPE
3355     *  |   |       |   `--IDENT -&gt; Bar
3356     *  |   |       |--IDENT -&gt; bar
3357     *  |   |       `--ASSIGN -&gt; =
3358     *  |   |           `--EXPR -&gt; EXPR
3359     *  |   |               `--LITERAL_NEW -&gt; new
3360     *  |   |                   |--IDENT -&gt; Bar
3361     *  |   |                   |--LPAREN -&gt; (
3362     *  |   |                   |--ELIST -&gt; ELIST
3363     *  |   |                   `--RPAREN -&gt; )
3364     *  |   `--RPAREN -&gt; )
3365     *  `--SLIST -&gt; {
3366     *      `--RCURLY -&gt; }
3367     * </pre>
3368     *
3369     * @see #RESOURCES
3370     * @see #RESOURCE_SPECIFICATION
3371     **/
3372    public static final int RESOURCE =
3373        JavaLanguageLexer.RESOURCE;
3374
3375    /**
3376     * The {@code catch} keyword.
3377     *
3378     * <p>For example:</p>
3379     * <pre>
3380     * try {
3381     *     FileReader fr = new FileReader("Test.txt");
3382     * } catch (FileNotFoundException e) {
3383     *
3384     * }
3385     * </pre>
3386     *
3387     * <p>parses as:</p>
3388     * <pre>
3389     * LITERAL_TRY -&gt; try
3390     *  |--SLIST -&gt; {
3391     *  |   |--VARIABLE_DEF -&gt; VARIABLE_DEF
3392     *  |   |   |--MODIFIERS -&gt; MODIFIERS
3393     *  |   |   |--TYPE -&gt; TYPE
3394     *  |   |   |   `--IDENT -&gt; FileReader
3395     *  |   |   |--IDENT -&gt; fr
3396     *  |   |   `--ASSIGN -&gt; =
3397     *  |   |       `--EXPR -&gt; EXPR
3398     *  |   |           `--LITERAL_NEW -&gt; new
3399     *  |   |               |--IDENT -&gt; FileReader
3400     *  |   |               |--LPAREN -&gt; (
3401     *  |   |               |--ELIST -&gt; ELIST
3402     *  |   |               |   `--EXPR -&gt; EXPR
3403     *  |   |               |       `--STRING_LITERAL -&gt; "Test.txt"
3404     *  |   |               `--RPAREN -&gt; )
3405     *  |   |--SEMI -&gt; ;
3406     *  |   `--RCURLY -&gt; }
3407     *  `--LITERAL_CATCH -&gt; catch
3408     *      |--LPAREN -&gt; (
3409     *      |--PARAMETER_DEF -&gt; PARAMETER_DEF
3410     *      |   |--MODIFIERS -&gt; MODIFIERS
3411     *      |   |--TYPE -&gt; TYPE
3412     *      |   |   `--IDENT -&gt; FileNotFoundException
3413     *      |   `--IDENT -&gt; e
3414     *      |--RPAREN -&gt; )
3415     *      `--SLIST -&gt; {
3416     *          `--RCURLY -&gt; }
3417     * </pre>
3418     *
3419     * @see #LPAREN
3420     * @see #PARAMETER_DEF
3421     * @see #RPAREN
3422     * @see #SLIST
3423     * @see #LITERAL_TRY
3424     **/
3425    public static final int LITERAL_CATCH =
3426        JavaLanguageLexer.LITERAL_CATCH;
3427
3428    /**
3429     * The {@code finally} keyword.
3430     *
3431     * <p>For example:</p>
3432     * <pre>
3433     * try {} finally {}
3434     * </pre>
3435     *
3436     * <p>parses as:</p>
3437     * <pre>
3438     * LITERAL_TRY -&gt; try
3439     *  |--SLIST -&gt; {
3440     *  |   `--RCURLY -&gt; }
3441     *  `--LITERAL_FINALLY -&gt; finally
3442     *      `--SLIST -&gt; {
3443     *          `--RCURLY -&gt; }
3444     * </pre>
3445     *
3446     * @see #SLIST
3447     * @see #LITERAL_TRY
3448     **/
3449    public static final int LITERAL_FINALLY =
3450        JavaLanguageLexer.LITERAL_FINALLY;
3451
3452    /**
3453     * The {@code +=} (addition assignment) operator.
3454     *
3455     * <p>For example:</p>
3456     * <pre>
3457     * a += b;
3458     * </pre>
3459     *
3460     * <p>parses as:</p>
3461     * <pre>
3462     * |--EXPR -&gt; EXPR
3463     * |   `--PLUS_ASSIGN -&gt; +=
3464     * |       |--IDENT -&gt; a
3465     * |       `--IDENT -&gt; b
3466     * |--SEMI -&gt; ;
3467     * </pre>
3468     *
3469     * @see <a
3470     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.26.2">Java
3471     *     Language Specification, &sect;15.26.2</a>
3472     * @see #EXPR
3473     **/
3474    public static final int PLUS_ASSIGN = JavaLanguageLexer.PLUS_ASSIGN;
3475    /**
3476     * The {@code -=} (subtraction assignment) operator.
3477     *
3478     * <p>For example:</p>
3479     * <pre>
3480     * a -= b;
3481     * </pre>
3482     *
3483     * <p>parses as:</p>
3484     * <pre>
3485     * |--EXPR -&gt; EXPR
3486     * |   `--MINUS_ASSIGN -&gt; -=
3487     * |       |--IDENT -&gt; a
3488     * |       `--IDENT -&gt; b
3489     * |--SEMI -&gt; ;
3490     * </pre>
3491     *
3492     * @see <a
3493     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.26.2">Java
3494     *     Language Specification, &sect;15.26.2</a>
3495     * @see #EXPR
3496     **/
3497    public static final int MINUS_ASSIGN =
3498        JavaLanguageLexer.MINUS_ASSIGN;
3499
3500    /**
3501     * The {@code *=} (multiplication assignment) operator.
3502     *
3503     * <p>For example:</p>
3504     * <pre>
3505     * a *= b;
3506     * </pre>
3507     *
3508     * <p>parses as:</p>
3509     * <pre>
3510     * |--EXPR -&gt; EXPR
3511     * |   `--STAR_ASSIGN -&gt; *=
3512     * |       |--IDENT -&gt; a
3513     * |       `--IDENT -&gt; b
3514     * |--SEMI -&gt; ;
3515     * </pre>
3516     *
3517     * @see <a
3518     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.26.2">Java
3519     *     Language Specification, &sect;15.26.2</a>
3520     * @see #EXPR
3521     **/
3522    public static final int STAR_ASSIGN = JavaLanguageLexer.STAR_ASSIGN;
3523    /**
3524     * The {@code /=} (division assignment) operator.
3525     *
3526     * <p>For example:</p>
3527     * <pre>
3528     * a /= b;
3529     * </pre>
3530     *
3531     * <p>parses as:</p>
3532     * <pre>
3533     * |--EXPR -&gt; EXPR
3534     * |   `--DIV_ASSIGN -&gt; /=
3535     * |       |--IDENT -&gt; a
3536     * |       `--IDENT -&gt; b
3537     * |--SEMI -&gt; ;
3538     * </pre>
3539     *
3540     * @see <a
3541     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.26.2">Java
3542     *     Language Specification, &sect;15.26.2</a>
3543     * @see #EXPR
3544     **/
3545    public static final int DIV_ASSIGN = JavaLanguageLexer.DIV_ASSIGN;
3546    /**
3547     * The {@code %=} (remainder assignment) operator.
3548     *
3549     * <p>For example:</p>
3550     * <pre>a %= 2;</pre>
3551     *
3552     * <p>parses as:</p>
3553     * <pre>
3554     * |--EXPR -&gt; EXPR
3555     * |   `--MOD_ASSIGN -&gt; %=
3556     * |       |--IDENT -&gt; a
3557     * |       `--NUM_INT -&gt; 2
3558     * |--SEMI -&gt; ;
3559     * </pre>
3560     *
3561     * @see <a
3562     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.26.2">Java
3563     *     Language Specification, &sect;15.26.2</a>
3564     * @see #EXPR
3565     **/
3566    public static final int MOD_ASSIGN = JavaLanguageLexer.MOD_ASSIGN;
3567    /**
3568     * The {@code >>=} (signed right shift assignment)
3569     * operator.
3570     *
3571     * <p>For example:</p>
3572     * <pre>
3573     * a &gt;&gt;= b;
3574     * </pre>
3575     *
3576     * <p>parses as:</p>
3577     * <pre>
3578     * |--EXPR -&gt; EXPR
3579     * |   `--SR_ASSIGN -&gt; &gt;&gt;=
3580     * |       |--IDENT -&gt; a
3581     * |       `--IDENT -&gt; b
3582     * |--SEMI -&gt; ;
3583     * </pre>
3584     *
3585     * @see <a
3586     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.26.2">Java
3587     *     Language Specification, &sect;15.26.2</a>
3588     * @see #EXPR
3589     **/
3590    public static final int SR_ASSIGN = JavaLanguageLexer.SR_ASSIGN;
3591    /**
3592     * The {@code >>>=} (unsigned right shift assignment)
3593     * operator.
3594     *
3595     * <p>For example:</p>
3596     * <pre>
3597     * a &gt;&gt;&gt;= b;
3598     * </pre>
3599     *
3600     * <p>parses as:</p>
3601     * <pre>
3602     * |--EXPR -&gt; EXPR
3603     * |   `--BSR_ASSIGN -&gt; &gt;&gt;&gt;=
3604     * |       |--IDENT -&gt; a
3605     * |       `--IDENT -&gt; b
3606     * |--SEMI -&gt; ;
3607     * </pre>
3608     *
3609     * @see <a
3610     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.26.2">Java
3611     *     Language Specification, &sect;15.26.2</a>
3612     * @see #EXPR
3613     **/
3614    public static final int BSR_ASSIGN = JavaLanguageLexer.BSR_ASSIGN;
3615    /**
3616     * The {@code <<=} (left shift assignment) operator.
3617     *
3618     * @see <a
3619     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.26.2">Java
3620     *     Language Specification, &sect;15.26.2</a>
3621     * @see #EXPR
3622     **/
3623    public static final int SL_ASSIGN = JavaLanguageLexer.SL_ASSIGN;
3624    /**
3625     * The {@code &=} (bitwise AND assignment) operator.
3626     *
3627     * <p>For example:</p>
3628     * <pre>
3629     * a &amp;= b;
3630     * </pre>
3631     *
3632     * <p>parses as:</p>
3633     * <pre>
3634     * |--EXPR -&gt; EXPR
3635     * |   `--BAND_ASSIGN -&gt; &amp;=
3636     * |       |--IDENT -&gt; a
3637     * |       `--IDENT -&gt; b
3638     * |--SEMI -&gt; ;
3639     * </pre>
3640     *
3641     * @see <a
3642     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.26.2">Java
3643     *     Language Specification, &sect;15.26.2</a>
3644     * @see #EXPR
3645     **/
3646    public static final int BAND_ASSIGN = JavaLanguageLexer.BAND_ASSIGN;
3647    /**
3648     * The {@code ^=} (bitwise exclusive OR assignment) operator.
3649     *
3650     * @see <a
3651     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.26.2">Java
3652     *     Language Specification, &sect;15.26.2</a>
3653     * @see #EXPR
3654     **/
3655    public static final int BXOR_ASSIGN = JavaLanguageLexer.BXOR_ASSIGN;
3656    /**
3657     * The {@code |=} (bitwise OR assignment) operator.
3658     *
3659     * <p>For example:</p>
3660     * <pre>
3661     * a |= b;
3662     * </pre>
3663     *
3664     * <p>parses as:</p>
3665     * <pre>
3666     * |--EXPR -&gt; EXPR
3667     * |   `--BOR_ASSIGN -&gt; |=
3668     * |       |--IDENT -&gt; a
3669     * |       `--IDENT -&gt; b
3670     * |--SEMI -&gt; ;
3671     * </pre>
3672     *
3673     * @see <a
3674     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.26.2">Java
3675     *     Language Specification, &sect;15.26.2</a>
3676     * @see #EXPR
3677     **/
3678    public static final int BOR_ASSIGN = JavaLanguageLexer.BOR_ASSIGN;
3679    /**
3680     * The {@code ?} (conditional) operator.  Technically,
3681     * the colon is also part of this operator, but it appears as a
3682     * separate token.
3683     *
3684     * <p>For example:</p>
3685     * <pre>
3686     * String variable=(quantity==1)?"true":"false";
3687     * </pre>
3688     *
3689     * <p>parses as:</p>
3690     * <pre>
3691     * |--VARIABLE_DEF -&gt; VARIABLE_DEF
3692     * |   |--MODIFIERS -&gt; MODIFIERS
3693     * |   |--TYPE -&gt; TYPE
3694     * |   |   `--IDENT -&gt; String
3695     * |   |--IDENT -&gt; variable
3696     * |   `--ASSIGN -&gt; =
3697     * |       `--EXPR -&gt; EXPR
3698     * |           `--QUESTION -&gt; ?
3699     * |               |--LPAREN -&gt; (
3700     * |               |--EQUAL -&gt; ==
3701     * |               |   |--IDENT -&gt; quantity
3702     * |               |   `--NUM_INT -&gt; 1
3703     * |               |--RPAREN -&gt; )
3704     * |               |--STRING_LITERAL -&gt; "true"
3705     * |               |--COLON -&gt; :
3706     * |               `--STRING_LITERAL -&gt; "false"
3707     * |--SEMI -&gt; ;
3708     * </pre>
3709     *
3710     * @see <a
3711     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.25">Java
3712     *     Language Specification, &sect;15.25</a>
3713     * @see #EXPR
3714     * @see #COLON
3715     **/
3716    public static final int QUESTION = JavaLanguageLexer.QUESTION;
3717    /**
3718     * The {@code ||} (conditional OR) operator.
3719     *
3720     * <p>For example:</p>
3721     * <pre>
3722     * if (a || b) {
3723     * }
3724     * </pre>
3725     *
3726     * <p>
3727     * parses as:
3728     * </p>
3729     * <pre>
3730     * LITERAL_IF -&gt; if
3731     *  |--LPAREN -&gt; (
3732     *  |--EXPR -&gt; EXPR
3733     *  |   `--LOR -&gt; ||
3734     *  |       |--IDENT -&gt; a
3735     *  |       `--IDENT -&gt; b
3736     *  |--RPAREN -&gt; )
3737     *  |--SLIST -&gt; {
3738     *  |   |--RCURLY -&gt; }
3739     * </pre>
3740     *
3741     * @see <a
3742     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.24">Java
3743     *     Language Specification, &sect;15.24</a>
3744     * @see #EXPR
3745     **/
3746    public static final int LOR = JavaLanguageLexer.LOR;
3747    /**
3748     * The {@code &&} (conditional AND) operator.
3749     *
3750     * <p>For example:</p>
3751     * <pre>
3752     * if (a &amp;&amp; b) {
3753     * }
3754     * </pre>
3755     *
3756     * <p>parses as:</p>
3757     * <pre>
3758     * LITERAL_IF -&gt; if
3759     *  |--LPAREN -&gt; (
3760     *  |--EXPR -&gt; EXPR
3761     *  |   `--LAND -&gt; &amp;&amp;
3762     *  |       |--IDENT -&gt; a
3763     *  |       `--IDENT -&gt; b
3764     *  |--RPAREN -&gt; )
3765     *  |--SLIST -&gt; {
3766     *  |   |--RCURLY -&gt; }
3767     * </pre>
3768     *
3769     * @see <a
3770     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.23">Java
3771     *     Language Specification, &sect;15.23</a>
3772     * @see #EXPR
3773     **/
3774    public static final int LAND = JavaLanguageLexer.LAND;
3775    /**
3776     * The {@code |} (bitwise OR) operator.
3777     *
3778     * <p>For example:</p>
3779     * <pre>
3780     * a = a | b;
3781     * </pre>
3782     *
3783     * <p>parses as:</p>
3784     * <pre>
3785     * |--EXPR -&gt; EXPR
3786     * |   `--ASSIGN -&gt; =
3787     * |       |--IDENT -&gt; a
3788     * |       `--BOR -&gt; |
3789     * |           |--IDENT -&gt; a
3790     * |           `--IDENT -&gt; b
3791     * |--SEMI -&gt; ;
3792     * </pre>
3793     *
3794     * @see <a
3795     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.22.1">Java
3796     *     Language Specification, &sect;15.22.1</a>
3797     * @see #EXPR
3798     **/
3799    public static final int BOR = JavaLanguageLexer.BOR;
3800    /**
3801     * The {@code ^} (bitwise exclusive OR) operator.
3802     *
3803     * @see <a
3804     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.22.1">Java
3805     *     Language Specification, &sect;15.22.1</a>
3806     * @see #EXPR
3807     **/
3808    public static final int BXOR = JavaLanguageLexer.BXOR;
3809    /**
3810     * The {@code &} (bitwise AND) operator.
3811     *
3812     * <p>For example:</p>
3813     * <pre>
3814     * c = a &amp; b;
3815     * </pre>
3816     *
3817     * <p>parses as:</p>
3818     * <pre>
3819     * |--EXPR -&gt; EXPR
3820     * |   `--ASSIGN -&gt; =
3821     * |       |--IDENT -&gt; c
3822     * |       `--BAND -&gt; &amp;
3823     * |           |--IDENT -&gt; a
3824     * |           `--IDENT -&gt; b
3825     * |--SEMI -&gt; ;
3826     * </pre>
3827     *
3828     * @see <a
3829     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.22.1">Java
3830     *     Language Specification, &sect;15.22.1</a>
3831     * @see #EXPR
3832     **/
3833    public static final int BAND = JavaLanguageLexer.BAND;
3834    /**
3835     * The {@code !=} (not equal) operator.
3836     *
3837     * <p>For example:</p>
3838     * <pre>
3839     * a != b;
3840     * </pre>
3841     *
3842     * <p>parses as:</p>
3843     * <pre>
3844     * |--EXPR -&gt; EXPR
3845     * |   `--NOT_EQUAL -&gt; !=
3846     * |       |--IDENT -&gt; a
3847     * |       `--IDENT -&gt; b
3848     * `--SEMI -&gt; ;
3849     * </pre>
3850     *
3851     * @see #EXPR
3852     **/
3853    public static final int NOT_EQUAL = JavaLanguageLexer.NOT_EQUAL;
3854    /**
3855     * The {@code ==} (equal) operator.
3856     *
3857     * <p>For example:</p>
3858     * <pre>
3859     * return a == b;
3860     * </pre>
3861     *
3862     * <p>parses as:</p>
3863     * <pre>
3864     * |--EXPR -&gt; EXPR
3865     * |   `--EQUAL -&gt; ==
3866     * |       |--IDENT -&gt; a
3867     * |       `--IDENT -&gt; b
3868     * `--SEMI -&gt; ;
3869     * </pre>
3870     *
3871     * @see #EXPR
3872     **/
3873    public static final int EQUAL = JavaLanguageLexer.EQUAL;
3874    /**
3875     * The {@code <} (less than) operator.
3876     *
3877     * <p>For example:</p>
3878     * <pre>
3879     * c = a &lt; b;
3880     * </pre>
3881     *
3882     * <p>parses as:</p>
3883     * <pre>
3884     * |--EXPR -&gt; EXPR
3885     * |   `--ASSIGN -&gt; =
3886     * |       |--IDENT -&gt; c
3887     * |       `--LT -&gt; &lt;
3888     * |           |--IDENT -&gt; a
3889     * |           `--IDENT -&gt; b
3890     * |--SEMI -&gt; ;
3891     * </pre>
3892     *
3893     * @see #EXPR
3894     **/
3895    public static final int LT = JavaLanguageLexer.LT;
3896    /**
3897     * The {@code >} (greater than) operator.
3898     *
3899     * <p>For example:</p>
3900     * <pre>
3901     * c = a &gt; b;
3902     * </pre>
3903     *
3904     * <p>parses as:</p>
3905     * <pre>
3906     * |--EXPR -&gt; EXPR
3907     * |   `--ASSIGN -&gt; =
3908     * |       |--IDENT -&gt; c
3909     * |       `--BAND -&gt; &gt;
3910     * |           |--IDENT -&gt; a
3911     * |           `--IDENT -&gt; b
3912     * |--SEMI -&gt; ;
3913     * </pre>
3914     *
3915     * @see #EXPR
3916     **/
3917    public static final int GT = JavaLanguageLexer.GT;
3918    /**
3919     * The {@code <=} (less than or equal) operator.
3920     *
3921     * <p>For example:</p>
3922     * <pre>
3923     * c = a &lt;= b;
3924     * </pre>
3925     *
3926     * <p>parses as:</p>
3927     * <pre>
3928     * |--EXPR -&gt; EXPR
3929     * |   `--ASSIGN -&gt; =
3930     * |       |--IDENT -&gt; c
3931     * |       `--LE -&gt; &lt;=
3932     * |           |--IDENT -&gt; a
3933     * |           `--IDENT -&gt; b
3934     * |--SEMI -&gt; ;
3935     * </pre>
3936     *
3937     * @see #EXPR
3938     **/
3939    public static final int LE = JavaLanguageLexer.LE;
3940    /**
3941     * The {@code >=} (greater than or equal) operator.
3942     *
3943     * <p>For example:</p>
3944     * <pre>
3945     *   boolean b = a &gt;= 3;
3946     * </pre>
3947     *
3948     * <p>parses as:</p>
3949     * <pre>
3950     * VARIABLE_DEF -&gt; VARIABLE_DEF
3951     *  |--MODIFIERS -&gt; MODIFIERS
3952     *  |--TYPE -&gt; TYPE
3953     *  |   `--LITERAL_BOOLEAN -&gt; boolean
3954     *  |--IDENT -&gt; b
3955     *  `--ASSIGN -&gt; =
3956     *      `--EXPR -&gt; EXPR
3957     *          `--GE -&gt; &gt;=
3958     *              |--IDENT -&gt; a
3959     *              `--NUM_INT -&gt; 3
3960     * </pre>
3961     *
3962     * @see #EXPR
3963     **/
3964    public static final int GE = JavaLanguageLexer.GE;
3965    /**
3966     * The {@code instanceof} operator.  The first child is an
3967     * object reference or something that evaluates to an object
3968     * reference.  The second child is a reference type or pattern.
3969     *
3970     * <p>For example:</p>
3971     * <pre>
3972     * boolean isBuilderReferenceType = text instanceof StringBuilder; // reference type
3973     * boolean isBuilderPatternWithPattern =
3974     *         text instanceof StringBuilder s; // type pattern, no `PATTERN_DEF`
3975     * </pre>
3976     *
3977     * <p>parses as:</p>
3978     * <pre>
3979     * |--VARIABLE_DEF -&gt; VARIABLE_DEF
3980     * |   |--MODIFIERS -&gt; MODIFIERS
3981     * |   |--TYPE -&gt; TYPE
3982     * |   |   `--LITERAL_BOOLEAN -&gt; boolean
3983     * |   |--IDENT -&gt; isBuilderReferenceType
3984     * |   `--ASSIGN -&gt; =
3985     * |       `--EXPR -&gt; EXPR
3986     * |           `--LITERAL_INSTANCEOF -&gt; instanceof
3987     * |               |--IDENT -&gt; text
3988     * |               `--TYPE -&gt; TYPE
3989     * |                   `--IDENT -&gt; StringBuilder
3990     * |--SEMI -&gt; ;
3991     * |--VARIABLE_DEF -&gt; VARIABLE_DEF
3992     * |   |--MODIFIERS -&gt; MODIFIERS
3993     * |   |--TYPE -&gt; TYPE
3994     * |   |   `--LITERAL_BOOLEAN -&gt; boolean
3995     * |   |--IDENT -&gt; isBuilderPatternWithPattern
3996     * |   `--ASSIGN -&gt; =
3997     * |       `--EXPR -&gt; EXPR
3998     * |           `--LITERAL_INSTANCEOF -&gt; instanceof
3999     * |               |--IDENT -&gt; text
4000     * |               `--PATTERN_VARIABLE_DEF -&gt; PATTERN_VARIABLE_DEF
4001     * |                   |--MODIFIERS -&gt; MODIFIERS
4002     * |                   |--TYPE -&gt; TYPE
4003     * |                   |   `--IDENT -&gt; StringBuilder
4004     * |                   `--IDENT -&gt; s
4005     * |--SEMI -&gt; ;
4006     * </pre>
4007     *
4008     * @see <a
4009     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.20.2">Java
4010     *     Language Specification, &sect;15.20.2</a>
4011     * @see #EXPR
4012     * @see #METHOD_CALL
4013     * @see #IDENT
4014     * @see #DOT
4015     * @see #TYPE
4016     * @see #PATTERN_VARIABLE_DEF
4017     * @see FullIdent
4018     **/
4019    public static final int LITERAL_INSTANCEOF =
4020        JavaLanguageLexer.LITERAL_INSTANCEOF;
4021
4022    /**
4023     * The {@code <<} (shift left) operator.
4024     *
4025     * <p>For example:</p>
4026     * <pre>
4027     * a = a &lt;&lt; b;
4028     * </pre>
4029     *
4030     * <p>parses as:</p>
4031     * <pre>
4032     * |--EXPR -&gt; EXPR
4033     * |   `--ASSIGN -&gt; =
4034     * |       |--IDENT -&gt; a
4035     * |       `--SR -&gt; &lt;&lt;
4036     * |           |--IDENT -&gt; a
4037     * |           `--IDENT -&gt; b
4038     * |--SEMI -&gt; ;
4039     * </pre>
4040     *
4041     * @see <a
4042     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.19">Java
4043     *     Language Specification, &sect;15.19</a>
4044     * @see #EXPR
4045     **/
4046    public static final int SL = JavaLanguageLexer.SL;
4047    /**
4048     * The {@code >>} (signed shift right) operator.
4049     *
4050     * <p>For example:</p>
4051     * <pre>
4052     * a = a &gt;&gt; b;
4053     * </pre>
4054     *
4055     * <p>parses as:</p>
4056     * <pre>
4057     * |--EXPR -&gt; EXPR
4058     * |   `--ASSIGN -&gt; =
4059     * |       |--IDENT -&gt; a
4060     * |       `--SR -&gt; &gt;&gt;
4061     * |           |--IDENT -&gt; a
4062     * |           `--IDENT -&gt; b
4063     * |--SEMI -&gt; ;
4064     * </pre>
4065     *
4066     * @see <a
4067     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.19">Java
4068     *     Language Specification, &sect;15.19</a>
4069     * @see #EXPR
4070     **/
4071    public static final int SR = JavaLanguageLexer.SR;
4072    /**
4073     * The {@code >>>} (unsigned shift right) operator.
4074     *
4075     * <p>For example:</p>
4076     * <pre>
4077     * a &gt;&gt;&gt; b;
4078     * </pre>
4079     *
4080     * <p>parses as:</p>
4081     * <pre>
4082     * |--EXPR -&gt; EXPR
4083     * |   `--BSR -&gt; &gt;&gt;&gt;
4084     * |       |--IDENT -&gt; a
4085     * |       `--IDENT -&gt; b
4086     * |--SEMI -&gt; ;
4087     * </pre>
4088     *
4089     * @see <a
4090     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.19">Java
4091     *     Language Specification, &sect;15.19</a>
4092     * @see #EXPR
4093     **/
4094    public static final int BSR = JavaLanguageLexer.BSR;
4095    /**
4096     * The {@code +} (addition) operator.
4097     *
4098     * <p>For example:</p>
4099     * <pre>
4100     * c = a + b;
4101     * </pre>
4102     *
4103     * <p>parses as:</p>
4104     * <pre>
4105     * |--EXPR -&gt; EXPR
4106     * |   `--ASSIGN -&gt; =
4107     * |       |--IDENT -&gt; c
4108     * |       `--PLUS -&gt; +
4109     * |           |--IDENT -&gt; a
4110     * |           `--IDENT -&gt; b
4111     * |--SEMI -&gt; ;
4112     * </pre>
4113     *
4114     * @see <a
4115     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.18">Java
4116     *     Language Specification, &sect;15.18</a>
4117     * @see #EXPR
4118     **/
4119    public static final int PLUS = JavaLanguageLexer.PLUS;
4120    /**
4121     * The {@code -} (subtraction) operator.
4122     *
4123     * <p>For example:</p>
4124     * <pre>
4125     * c = a - b;
4126     * </pre>
4127     *
4128     * <p>parses as:</p>
4129     * <pre>
4130     * |--EXPR -&gt; EXPR
4131     * |   `--ASSIGN -&gt; =
4132     * |       |--IDENT -&gt; c
4133     * |       `--MINUS -&gt; -
4134     * |           |--IDENT -&gt; a
4135     * |           `--IDENT -&gt; b
4136     * |--SEMI -&gt; ;
4137     * </pre>
4138     *
4139     * @see <a
4140     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.18">Java
4141     *     Language Specification, &sect;15.18</a>
4142     * @see #EXPR
4143     **/
4144    public static final int MINUS = JavaLanguageLexer.MINUS;
4145    /**
4146     * The {@code /} (division) operator.
4147     *
4148     * <p>For example:</p>
4149     * <pre>
4150     * a = 4 / 2;
4151     * </pre>
4152     *
4153     * <p>parses as:</p>
4154     * <pre>
4155     * |--EXPR -&gt; EXPR
4156     * |   `--ASSIGN -&gt; =
4157     * |       |--IDENT -&gt; a
4158     * |       `--DIV -&gt; /
4159     * |           |--NUM_INT -&gt; 4
4160     * |           `--NUM_INT -&gt; 2
4161     * |--SEMI -&gt; ;
4162     * </pre>
4163     *
4164     * @see <a
4165     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.17.2">Java
4166     *     Language Specification, &sect;15.17.2</a>
4167     * @see #EXPR
4168     **/
4169    public static final int DIV = JavaLanguageLexer.DIV;
4170    /**
4171     * The {@code %} (remainder) operator.
4172     *
4173     * <p>For example:</p>
4174     * <pre>
4175     * c = a % b;
4176     * </pre>
4177     *
4178     * <p>parses as:</p>
4179     * <pre>
4180     * EXPR -&gt; EXPR
4181     *  `--ASSIGN -&gt; =
4182     *      |--IDENT -&gt; c
4183     *      `--MOD -&gt; %
4184     *          |--IDENT -&gt; a
4185     *          `--IDENT -&gt; b
4186     * SEMI -&gt; ;
4187     * </pre>
4188     *
4189     * @see <a
4190     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.17.3">Java
4191     *     Language Specification, &sect;15.17.3</a>
4192     * @see #EXPR
4193     **/
4194    public static final int MOD = JavaLanguageLexer.MOD;
4195    /**
4196     * The {@code ++} (prefix increment) operator.
4197     *
4198     * <p>For example:</p>
4199     * <pre>
4200     * ++a;
4201     * </pre>
4202     *
4203     * <p>parses as:</p>
4204     * <pre>
4205     * |--EXPR -&gt; EXPR
4206     * |   `--INC -&gt; ++
4207     * |       `--IDENT -&gt; a
4208     * |--SEMI -&gt; ;
4209     * </pre>
4210     *
4211     * @see <a
4212     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.15.1">Java
4213     *     Language Specification, &sect;15.15.1</a>
4214     * @see #EXPR
4215     * @see #POST_INC
4216     **/
4217    public static final int INC = JavaLanguageLexer.INC;
4218    /**
4219     * The {@code --} (prefix decrement) operator.
4220     *
4221     * <p>For example:</p>
4222     * <pre>
4223     * --a;
4224     * </pre>
4225     *
4226     * <p>parses as:</p>
4227     * <pre>
4228     * |--EXPR -&gt; EXPR
4229     * |   `--DEC -&gt; --
4230     * |       `--IDENT -&gt; a
4231     * |--SEMI -&gt; ;
4232     * </pre>
4233     *
4234     * @see <a
4235     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.15.2">Java
4236     *     Language Specification, &sect;15.15.2</a>
4237     * @see #EXPR
4238     * @see #POST_DEC
4239     **/
4240    public static final int DEC = JavaLanguageLexer.DEC;
4241    /**
4242     * The {@code ~} (bitwise complement) operator.
4243     *
4244     * <p>For example:</p>
4245     * <pre>
4246     * a = ~ a;
4247     * </pre>
4248     *
4249     * <p>parses as:</p>
4250     * <pre>
4251     * |--EXPR -&gt; EXPR
4252     * |   `--ASSIGN -&gt; =
4253     * |       |--IDENT -&gt; a
4254     * |       `--BNOT -&gt; ~
4255     * |           `--IDENT -&gt; a
4256     * |--SEMI -&gt; ;
4257     * </pre>
4258     *
4259     * @see <a
4260     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.15.5">Java
4261     *     Language Specification, &sect;15.15.5</a>
4262     * @see #EXPR
4263     **/
4264    public static final int BNOT = JavaLanguageLexer.BNOT;
4265    /**
4266     * The {@code !} (logical complement) operator.
4267     *
4268     * <p>For example:</p>
4269     * <pre>
4270     * c = &#33; a;
4271     * </pre>
4272     *
4273     * <p>parses as:</p>
4274     * <pre>
4275     * |--EXPR -&gt; EXPR
4276     * |   `--ASSIGN -&gt; =
4277     * |       |--IDENT -&gt; c
4278     * |       `--LNOT -&gt; &#33;
4279     * |           `--IDENT -&gt; a
4280     * |--SEMI -&gt; ;
4281     * </pre>
4282     *
4283     * @see <a
4284     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.15.6">Java
4285     *     Language Specification, &sect;15.15.6</a>
4286     * @see #EXPR
4287     **/
4288    public static final int LNOT = JavaLanguageLexer.LNOT;
4289    /**
4290     * The {@code true} keyword.
4291     *
4292     * <p>For example:</p>
4293     * <pre>
4294     * boolean a = true;
4295     * </pre>
4296     *
4297     * <p>parses as:</p>
4298     * <pre>
4299     * |--VARIABLE_DEF -&gt; VARIABLE_DEF
4300     * |   |--MODIFIERS -&gt; MODIFIERS
4301     * |   |--TYPE -&gt; TYPE
4302     * |   |   `--LITERAL_BOOLEAN -&gt; boolean
4303     * |   |--IDENT -&gt; a
4304     * |   `--ASSIGN -&gt; =
4305     * |       `--EXPR -&gt; EXPR
4306     * |           `--LITERAL_TRUE -&gt; true
4307     * |--SEMI -&gt; ;
4308     * </pre>
4309     *
4310     * @see <a
4311     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10.3">Java
4312     *     Language Specification, &sect;3.10.3</a>
4313     * @see #EXPR
4314     * @see #LITERAL_FALSE
4315     **/
4316    public static final int LITERAL_TRUE =
4317        JavaLanguageLexer.LITERAL_TRUE;
4318
4319    /**
4320     * The {@code false} keyword.
4321     *
4322     * <p>For example:</p>
4323     * <pre>
4324     * boolean a = false;
4325     * </pre>
4326     *
4327     * <p>parses as:</p>
4328     * <pre>
4329     * VARIABLE_DEF -&gt; VARIABLE_DEF
4330     *  |--MODIFIERS -&gt; MODIFIERS
4331     *  |--TYPE -&gt; TYPE
4332     *  |   `--LITERAL_BOOLEAN -&gt; boolean
4333     *  |--IDENT -&gt; a
4334     *  |--ASSIGN -&gt; =
4335     *  |   `--EXPR -&gt; EXPR
4336     *  |       `--LITERAL_FALSE -&gt; false
4337     *  `--SEMI -&gt; ;
4338     * </pre>
4339     *
4340     * @see <a
4341     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10.3">Java
4342     *     Language Specification, &sect;3.10.3</a>
4343     * @see #EXPR
4344     * @see #LITERAL_TRUE
4345     **/
4346    public static final int LITERAL_FALSE =
4347        JavaLanguageLexer.LITERAL_FALSE;
4348
4349    /**
4350     * The {@code null} keyword.
4351     *
4352     * <p>For example:</p>
4353     * <pre>
4354     * String s = null;
4355     * </pre>
4356     *
4357     * <p>parses as:</p>
4358     * <pre>
4359     * VARIABLE_DEF -&gt; VARIABLE_DEF
4360     *  |--MODIFIERS -&gt; MODIFIERS
4361     *  |--TYPE -&gt; TYPE
4362     *  |   `--IDENT -&gt; String
4363     *  |--IDENT -&gt; s
4364     *  |--ASSIGN -&gt; =
4365     *  |   `--EXPR -&gt; EXPR
4366     *  |       `--LITERAL_NULL -&gt; null
4367     *  `--SEMI -&gt; ;
4368     * </pre>
4369     *
4370     * @see <a
4371     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10.7">Java
4372     *     Language Specification, &sect;3.10.7</a>
4373     * @see #EXPR
4374     **/
4375    public static final int LITERAL_NULL =
4376        JavaLanguageLexer.LITERAL_NULL;
4377
4378    /**
4379     * The {@code new} keyword.  This element is used to define
4380     * new instances of objects, new arrays, and new anonymous inner
4381     * classes.
4382     *
4383     * <p>For example:</p>
4384     *
4385     * <pre>
4386     * List&lt;String&gt; l = new ArrayList&lt;String&gt;();
4387     * </pre>
4388     *
4389     * <p>parses as:</p>
4390     * <pre>
4391     * VARIABLE_DEF -&gt; VARIABLE_DEF
4392     *  |--MODIFIERS -&gt; MODIFIERS
4393     *  |--TYPE -&gt; TYPE
4394     *  |   |--IDENT -&gt; List
4395     *  |   `--TYPE_ARGUMENTS -&gt; TYPE_ARGUMENTS
4396     *  |       |--GENERIC_START -&gt; &lt;
4397     *  |       |--TYPE_ARGUMENT -&gt; TYPE_ARGUMENT
4398     *  |       |   `--IDENT -&gt; String
4399     *  |       `--GENERIC_END -&gt; &gt;
4400     *  |--IDENT -&gt; l
4401     *  |--ASSIGN -&gt; =
4402     *  |   `--EXPR -&gt; EXPR
4403     *  |       `--LITERAL_NEW -&gt; new
4404     *  |           |--IDENT -&gt; ArrayList
4405     *  |           |--TYPE_ARGUMENTS -&gt; TYPE_ARGUMENTS
4406     *  |           |   |--GENERIC_START -&gt; &lt;
4407     *  |           |   |--TYPE_ARGUMENT -&gt; TYPE_ARGUMENT
4408     *  |           |   |   `--IDENT -&gt; String
4409     *  |           |   `--GENERIC_END -&gt; &gt;
4410     *  |           |--LPAREN -&gt; (
4411     *  |           |--ELIST -&gt; ELIST
4412     *  |           `--RPAREN -&gt; )
4413     *  `--SEMI -&gt; ;
4414     * </pre>
4415     *
4416     * <p>For example:</p>
4417     * <pre>
4418     * String[] strings = new String[3];
4419     * </pre>
4420     *
4421     * <p>parses as:</p>
4422     * <pre>
4423     * VARIABLE_DEF -&gt; VARIABLE_DEF
4424     *  |--MODIFIERS -&gt; MODIFIERS
4425     *  |--TYPE -&gt; TYPE
4426     *  |   |--IDENT -&gt; String
4427     *  |   `--ARRAY_DECLARATOR -&gt; [
4428     *  |       `--RBRACK -&gt; ]
4429     *  |--IDENT -&gt; strings
4430     *  |--ASSIGN -&gt; =
4431     *  |   `--EXPR -&gt; EXPR
4432     *  |       `--LITERAL_NEW -&gt; new
4433     *  |           |--IDENT -&gt; String
4434     *  |           `--ARRAY_DECLARATOR -&gt; [
4435     *  |               |--EXPR -&gt; EXPR
4436     *  |               |   `--NUM_INT -&gt; 3
4437     *  |               `--RBRACK -&gt; ]
4438     *  `--SEMI -&gt; ;
4439     * </pre>
4440     *
4441     * <p>For example:</p>
4442     * <pre>
4443     * Supplier&lt;Integer&gt; s = new Supplier&lt;&gt;() {
4444     *     &#064;Override
4445     *     public Integer get() {
4446     *         return 42;
4447     *     }
4448     * };
4449     * </pre>
4450     *
4451     * <p>parses as:</p>
4452     * <pre>
4453     * VARIABLE_DEF -&gt; VARIABLE_DEF
4454     *  |--MODIFIERS -&gt; MODIFIERS
4455     *  |--TYPE -&gt; TYPE
4456     *  |   |--IDENT -&gt; Supplier
4457     *  |   `--TYPE_ARGUMENTS -&gt; TYPE_ARGUMENTS
4458     *  |       |--GENERIC_START -&gt; &lt;
4459     *  |       |--TYPE_ARGUMENT -&gt; TYPE_ARGUMENT
4460     *  |       |   `--IDENT -&gt; Integer
4461     *  |       `--GENERIC_END -&gt; &gt;
4462     *  |--IDENT -&gt; s
4463     *  |--ASSIGN -&gt; =
4464     *  |   `--EXPR -&gt; EXPR
4465     *  |       `--LITERAL_NEW -&gt; new
4466     *  |           |--IDENT -&gt; Supplier
4467     *  |           |--TYPE_ARGUMENTS -&gt; TYPE_ARGUMENTS
4468     *  |           |   |--GENERIC_START -&gt; &lt;
4469     *  |           |   `--GENERIC_END -&gt; &gt;
4470     *  |           |--LPAREN -&gt; (
4471     *  |           |--ELIST -&gt; ELIST
4472     *  |           |--RPAREN -&gt; )
4473     *  |           `--OBJBLOCK -&gt; OBJBLOCK
4474     *  |               |--LCURLY -&gt; {
4475     *  |               |--METHOD_DEF -&gt; METHOD_DEF
4476     *  |               |   |--MODIFIERS -&gt; MODIFIERS
4477     *  |               |   |   |--ANNOTATION -&gt; ANNOTATION
4478     *  |               |   |   |   |--AT -&gt; @
4479     *  |               |   |   |   `--IDENT -&gt; Override
4480     *  |               |   |   `--LITERAL_PUBLIC -&gt; public
4481     *  |               |   |--TYPE -&gt; TYPE
4482     *  |               |   |   `--IDENT -&gt; Integer
4483     *  |               |   |--IDENT -&gt; get
4484     *  |               |   |--LPAREN -&gt; (
4485     *  |               |   |--PARAMETERS -&gt; PARAMETERS
4486     *  |               |   |--RPAREN -&gt; )
4487     *  |               |   `--SLIST -&gt; {
4488     *  |               |       |--LITERAL_RETURN -&gt; return
4489     *  |               |       |   |--EXPR -&gt; EXPR
4490     *  |               |       |   |   `--NUM_INT -&gt; 42
4491     *  |               |       |   `--SEMI -&gt; ;
4492     *  |               |       `--RCURLY -&gt; }
4493     *  |               `--RCURLY -&gt; }
4494     *  `--SEMI -&gt; ;
4495     * </pre>
4496     *
4497     * @see #IDENT
4498     * @see #DOT
4499     * @see #LPAREN
4500     * @see #ELIST
4501     * @see #RPAREN
4502     * @see #OBJBLOCK
4503     * @see #ARRAY_INIT
4504     * @see FullIdent
4505     **/
4506    public static final int LITERAL_NEW = JavaLanguageLexer.LITERAL_NEW;
4507    /**
4508     * An integer literal.  These may be specified in decimal,
4509     * hexadecimal, or octal form.
4510     *
4511     * <p>For example:</p>
4512     * <pre>
4513     * a = 3;
4514     * </pre>
4515     *
4516     * <p>parses as:</p>
4517     * <pre>
4518     * |--EXPR -&gt; EXPR
4519     * |   `--ASSIGN -&gt; =
4520     * |       |--IDENT -&gt; a
4521     * |       `--NUM_INT -&gt; 3
4522     * |--SEMI -&gt; ;
4523     * </pre>
4524     *
4525     * @see <a
4526     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10.1">Java
4527     *     Language Specification, &sect;3.10.1</a>
4528     * @see #EXPR
4529     * @see #NUM_LONG
4530     **/
4531    public static final int NUM_INT = JavaLanguageLexer.NUM_INT;
4532    /**
4533     * A character literal.  This is a (possibly escaped) character
4534     * enclosed in single quotes.
4535     *
4536     * <p>For example:</p>
4537     * <pre>
4538     * return 'a';
4539     * </pre>
4540     *
4541     * <p>parses as:</p>
4542     * <pre>
4543     * --LITERAL_RETURN -&gt; return
4544     *    |--EXPR -&gt; EXPR
4545     *    |   `--CHAR_LITERAL -&gt; 'a'
4546     *    `--SEMI -&gt; ;
4547     * </pre>
4548     *
4549     * @see <a
4550     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10.4">Java
4551     *     Language Specification, &sect;3.10.4</a>
4552     * @see #EXPR
4553     **/
4554    public static final int CHAR_LITERAL =
4555        JavaLanguageLexer.CHAR_LITERAL;
4556
4557    /**
4558     * A string literal.  This is a sequence of (possibly escaped)
4559     * characters enclosed in double quotes.
4560     *
4561     * <p>For example:</p>
4562     * <pre>String str = "StringLiteral";</pre>
4563     *
4564     * <p>parses as:</p>
4565     * <pre>
4566     *  |--VARIABLE_DEF -&gt; VARIABLE_DEF
4567     *  |   |--MODIFIERS -&gt; MODIFIERS
4568     *  |   |--TYPE -&gt; TYPE
4569     *  |   |   `--IDENT -&gt; String
4570     *  |   |--IDENT -&gt; str
4571     *  |   `--ASSIGN -&gt; =
4572     *  |       `--EXPR -&gt; EXPR
4573     *  |           `--STRING_LITERAL -&gt; "StringLiteral"
4574     *  |--SEMI -&gt; ;
4575     * </pre>
4576     *
4577     * @see <a
4578     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10.5">Java
4579     *     Language Specification, &sect;3.10.5</a>
4580     * @see #EXPR
4581     **/
4582    public static final int STRING_LITERAL =
4583        JavaLanguageLexer.STRING_LITERAL;
4584
4585    /**
4586     * A single precision floating point literal.  This is a floating
4587     * point number with an {@code F} or {@code f} suffix.
4588     *
4589     * <p>For example:</p>
4590     * <pre>
4591     * a = 3.14f;
4592     * </pre>
4593     *
4594     * <p>parses as:</p>
4595     * <pre>
4596     * |--EXPR -&gt; EXPR
4597     * |   `--ASSIGN -&gt; =
4598     * |       |--IDENT -&gt; a
4599     * |       `--NUM_FLOAT -&gt; 3.14f
4600     * |--SEMI -&gt; ;
4601     * </pre>
4602     *
4603     * @see <a
4604     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10.2">Java
4605     *     Language Specification, &sect;3.10.2</a>
4606     * @see #EXPR
4607     * @see #NUM_DOUBLE
4608     **/
4609    public static final int NUM_FLOAT = JavaLanguageLexer.NUM_FLOAT;
4610    /**
4611     * A long integer literal.  These are almost the same as integer
4612     * literals, but they have an {@code L} or {@code l}
4613     * (ell) suffix.
4614     *
4615     * <p>For example:</p>
4616     * <pre>
4617     * a = 3l;
4618     * </pre>
4619     *
4620     * <p>parses as:</p>
4621     * <pre>
4622     * |--EXPR -&gt; EXPR
4623     * |   `--ASSIGN -&gt; =
4624     * |       |--IDENT -&gt; a
4625     * |       `--NUM_LONG -&gt; 3l
4626     * |--SEMI -&gt; ;
4627     * </pre>
4628     *
4629     * @see <a
4630     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10.1">Java
4631     *     Language Specification, &sect;3.10.1</a>
4632     * @see #EXPR
4633     * @see #NUM_INT
4634     **/
4635    public static final int NUM_LONG = JavaLanguageLexer.NUM_LONG;
4636    /**
4637     * A double precision floating point literal.  This is a floating
4638     * point number with an optional {@code D} or {@code d}
4639     * suffix.
4640     *
4641     * <p>For example:</p>
4642     * <pre>
4643     * a = 3.14d;
4644     * </pre>
4645     *
4646     * <p>parses as:</p>
4647     * <pre>
4648     * |--EXPR -&gt; EXPR
4649     * |   `--ASSIGN -&gt; =
4650     * |       |--IDENT -&gt; a
4651     * |       `--NUM_DOUBLE -&gt; 3.14d
4652     * |--SEMI -&gt; ;
4653     * </pre>
4654     *
4655     * @see <a
4656     *     href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10.2">Java
4657     *     Language Specification, &sect;3.10.2</a>
4658     * @see #EXPR
4659     * @see #NUM_FLOAT
4660     **/
4661    public static final int NUM_DOUBLE = JavaLanguageLexer.NUM_DOUBLE;
4662
4663    /**
4664     * The {@code assert} keyword.  This is only for Java 1.4 and
4665     * later.
4666     *
4667     * <p>For example:</p>
4668     * <pre>
4669     * assert(x==4);
4670     * </pre>
4671     *
4672     * <p>parses as:</p>
4673     * <pre>
4674     * LITERAL_ASSERT -&gt; assert
4675     *  |--EXPR -&gt; EXPR
4676     *  |   |--LPAREN -&gt; (
4677     *  |   |--EQUAL -&gt; ==
4678     *  |   |   |--IDENT -&gt; x
4679     *  |   |   `--NUM_INT -&gt; 4
4680     *  |   `--RPAREN -&gt; )
4681     *  `--SEMI -&gt; ;
4682     * </pre>
4683     **/
4684    public static final int LITERAL_ASSERT = JavaLanguageLexer.ASSERT;
4685
4686    /**
4687     * A static import declaration.  Static import declarations are optional,
4688     * but must appear after the package declaration and before the type
4689     * declaration.
4690     *
4691     * <p>For example:</p>
4692     * <pre>
4693     * import static java.io.IOException;
4694     * </pre>
4695     *
4696     * <p>parses as:</p>
4697     * <pre>
4698     * STATIC_IMPORT -&gt; import
4699     * |--LITERAL_STATIC -&gt; static
4700     * |--DOT -&gt; .
4701     * |   |--DOT -&gt; .
4702     * |   |   |--IDENT -&gt; java
4703     * |   |   `--IDENT -&gt; io
4704     * |   `--IDENT -&gt; IOException
4705     * `--SEMI -&gt; ;
4706     * </pre>
4707     *
4708     * @see <a href="https://www.jcp.org/en/jsr/detail?id=201">
4709     *     JSR201</a>
4710     * @see #LITERAL_STATIC
4711     * @see #DOT
4712     * @see #IDENT
4713     * @see #STAR
4714     * @see #SEMI
4715     * @see FullIdent
4716     **/
4717    public static final int STATIC_IMPORT =
4718        JavaLanguageLexer.STATIC_IMPORT;
4719
4720    /**
4721     * An enum declaration. Its notable children are
4722     * enum constant declarations followed by
4723     * any construct that may be expected in a class body.
4724     *
4725     * <p>For example:</p>
4726     * <pre>
4727     * public enum MyEnum
4728     *   implements Serializable
4729     * {
4730     *     FIRST_CONSTANT,
4731     *     SECOND_CONSTANT;
4732     *
4733     *     public void someMethod()
4734     *     {
4735     *     }
4736     * }
4737     * </pre>
4738     *
4739     * <p>parses as:</p>
4740     * <pre>
4741     * ENUM_DEF -&gt; ENUM_DEF
4742     *  |--MODIFIERS -&gt; MODIFIERS
4743     *  |   `--LITERAL_PUBLIC -&gt; public
4744     *  |--ENUM -&gt; enum
4745     *  |--IDENT -&gt; MyEnum
4746     *  |--IMPLEMENTS_CLAUSE -&gt; implements
4747     *  |   `--IDENT -&gt; Serializable
4748     *  `--OBJBLOCK -&gt; OBJBLOCK
4749     *      |--LCURLY -&gt; {
4750     *      |--ENUM_CONSTANT_DEF -&gt; ENUM_CONSTANT_DEF
4751     *      |   |--ANNOTATIONS -&gt; ANNOTATIONS
4752     *      |   `--IDENT -&gt; FIRST_CONSTANT
4753     *      |--COMMA -&gt; ,
4754     *      |--ENUM_CONSTANT_DEF -&gt; ENUM_CONSTANT_DEF
4755     *      |   |--ANNOTATIONS -&gt; ANNOTATIONS
4756     *      |   `--IDENT -&gt; SECOND_CONSTANT
4757     *      |--SEMI -&gt; ;
4758     *      |--METHOD_DEF -&gt; METHOD_DEF
4759     *      |   |--MODIFIERS -&gt; MODIFIERS
4760     *      |   |   `--LITERAL_PUBLIC -&gt; public
4761     *      |   |--TYPE -&gt; TYPE
4762     *      |   |   `--LITERAL_VOID -&gt; void
4763     *      |   |--IDENT -&gt; someMethod
4764     *      |   |--LPAREN -&gt; (
4765     *      |   |--PARAMETERS -&gt; PARAMETERS
4766     *      |   |--RPAREN -&gt; )
4767     *      |   `--SLIST -&gt; {
4768     *      |       `--RCURLY -&gt; }
4769     *      `--RCURLY -&gt; }
4770     * </pre>
4771     *
4772     * @see <a href="https://www.jcp.org/en/jsr/detail?id=201">
4773     *     JSR201</a>
4774     * @see #MODIFIERS
4775     * @see #ENUM
4776     * @see #IDENT
4777     * @see #EXTENDS_CLAUSE
4778     * @see #IMPLEMENTS_CLAUSE
4779     * @see #OBJBLOCK
4780     * @see #LITERAL_NEW
4781     * @see #ENUM_CONSTANT_DEF
4782     **/
4783    public static final int ENUM_DEF =
4784        JavaLanguageLexer.ENUM_DEF;
4785
4786    /**
4787     * The {@code enum} keyword.  This element appears
4788     * as part of an enum declaration.
4789     *
4790     * <p>For example:</p>
4791     * <pre>
4792     * public enum Count {}
4793     * </pre>
4794     *
4795     * <p>parses as:</p>
4796     * <pre>
4797     * ENUM_DEF -&gt; ENUM_DEF
4798     *  |--MODIFIERS -&gt; MODIFIERS
4799     *  |  `--LITERAL_PUBLIC -&gt; public
4800     *  |--ENUM -&gt; enum
4801     *  |--IDENT -&gt; Count
4802     *  `--OBJBLOCK -&gt; OBJBLOCK
4803     *      |--LCURLY -&gt; {
4804     *      `--RCURLY -&gt; }
4805     * </pre>
4806     *
4807     * @see <a href="https://www.jcp.org/en/jsr/detail?id=201">JSR201</a>
4808     * @see #MODIFIERS
4809     * @see #ENUM_DEF
4810     * @see #IDENT
4811     * @see #OBJBLOCK
4812     **/
4813    public static final int ENUM =
4814        JavaLanguageLexer.ENUM;
4815
4816    /**
4817     * An enum constant declaration. Its notable children are annotations,
4818     * arguments and object block akin to an anonymous
4819     * inner class' body.
4820     *
4821     * <p>For example:</p>
4822     * <pre>
4823     * SOME_CONSTANT(1)
4824     * {
4825     *     public void someMethodOverriddenFromMainBody()
4826     *     {
4827     *     }
4828     * }
4829     * </pre>
4830     *
4831     * <p>parses as:</p>
4832     * <pre>
4833     * ENUM_CONSTANT_DEF -&gt; ENUM_CONSTANT_DEF
4834     *   |   |--ANNOTATIONS -&gt; ANNOTATIONS
4835     *   |   |--IDENT -&gt; SOME_CONSTANT
4836     *   |   |--LPAREN -&gt; (
4837     *   |   |--ELIST -&gt; ELIST
4838     *   |   |   `--EXPR -&gt; EXPR
4839     *   |   |       `--NUM_INT -&gt; 1
4840     *   |   |--RPAREN -&gt; )
4841     *   |   `--OBJBLOCK -&gt; OBJBLOCK
4842     *   |       |--LCURLY -&gt; {
4843     *   |       |--METHOD_DEF -&gt; METHOD_DEF
4844     *   |       |   |--MODIFIERS -&gt; MODIFIERS
4845     *   |       |   |   `--LITERAL_PUBLIC -&gt; public
4846     *   |       |   |--TYPE -&gt; TYPE
4847     *   |       |   |   `--LITERAL_VOID -&gt; void
4848     *   |       |   |--IDENT -&gt; someMethodOverriddenFromMainBody
4849     *   |       |   |--LPAREN -&gt; (
4850     *   |       |   |--PARAMETERS -&gt; PARAMETERS
4851     *   |       |   |--RPAREN -&gt; )
4852     *   |       |   `--SLIST -&gt; {
4853     *   |       |       `--RCURLY -&gt; }
4854     *   |       `--RCURLY -&gt; }
4855     * </pre>
4856     *
4857     * @see <a href="https://www.jcp.org/en/jsr/detail?id=201">
4858     *     JSR201</a>
4859     * @see #ANNOTATIONS
4860     * @see #MODIFIERS
4861     * @see #IDENT
4862     * @see #ELIST
4863     * @see #OBJBLOCK
4864     **/
4865    public static final int ENUM_CONSTANT_DEF =
4866        JavaLanguageLexer.ENUM_CONSTANT_DEF;
4867
4868    /**
4869     * A for-each clause.  This is a child of
4870     * {@code LITERAL_FOR}.  The children of this element may be
4871     * a parameter definition, the colon literal and an expression.
4872     *
4873     * <p>For example:</p>
4874     * <pre>
4875     * for (int value : values) {
4876     *     doSomething();
4877     * }
4878     * </pre>
4879     *
4880     * <p>parses as:</p>
4881     * <pre>
4882     * LITERAL_FOR -&gt; for
4883     *  |--LPAREN -&gt; (
4884     *  |--FOR_EACH_CLAUSE -&gt; FOR_EACH_CLAUSE
4885     *  |   |--VARIABLE_DEF -&gt; VARIABLE_DEF
4886     *  |   |   |--MODIFIERS -&gt; MODIFIERS
4887     *  |   |   |--TYPE -&gt; TYPE
4888     *  |   |   |   `--LITERAL_INT -&gt; int
4889     *  |   |   `--IDENT -&gt; value
4890     *  |   |--COLON -&gt; :
4891     *  |   `--EXPR -&gt; EXPR
4892     *  |       `--IDENT -&gt; values
4893     *  |--RPAREN -&gt; )
4894     *  `--SLIST -&gt; {
4895     *      |--EXPR -&gt; EXPR
4896     *      |   `--METHOD_CALL -&gt; (
4897     *      |       |--IDENT -&gt; doSomething
4898     *      |       |--ELIST -&gt; ELIST
4899     *      |       `--RPAREN -&gt; )
4900     *      |--SEMI -&gt; ;
4901     *      `--RCURLY -&gt; }
4902     * </pre>
4903     *
4904     * @see #VARIABLE_DEF
4905     * @see #ELIST
4906     * @see #LITERAL_FOR
4907     **/
4908    public static final int FOR_EACH_CLAUSE =
4909        JavaLanguageLexer.FOR_EACH_CLAUSE;
4910
4911    /**
4912     * An annotation declaration. The notable children are the name of the
4913     * annotation type, annotation field declarations and (constant) fields.
4914     *
4915     * <p>For example:</p>
4916     * <pre>
4917     * public @interface MyAnnotation
4918     * {
4919     *     int someValue();
4920     * }
4921     * </pre>
4922     *
4923     * <p>parses as:</p>
4924     * <pre>
4925     * ANNOTATION_DEF -&gt; ANNOTATION_DEF
4926     *  |--MODIFIERS -&gt; MODIFIERS
4927     *  |   `--LITERAL_PUBLIC -&gt; public
4928     *  |--AT -&gt; @
4929     *  |--LITERAL_INTERFACE -&gt; interface
4930     *  |--IDENT -&gt; MyAnnotation
4931     *  `--OBJBLOCK -&gt; OBJBLOCK
4932     *      |--LCURLY -&gt; {
4933     *      |--ANNOTATION_FIELD_DEF -&gt; ANNOTATION_FIELD_DEF
4934     *      |   |--MODIFIERS -&gt; MODIFIERS
4935     *      |   |--TYPE -&gt; TYPE
4936     *      |   |   `--LITERAL_INT -&gt; int
4937     *      |   |--IDENT -&gt; someValue
4938     *      |   |--LPAREN -&gt; (
4939     *      |   |--RPAREN -&gt; )
4940     *      |   `--SEMI -&gt; ;
4941     *      `--RCURLY -&gt; }
4942     * </pre>
4943     *
4944     * @see <a href="https://www.jcp.org/en/jsr/detail?id=201">
4945     *     JSR201</a>
4946     * @see #MODIFIERS
4947     * @see #LITERAL_INTERFACE
4948     * @see #IDENT
4949     * @see #OBJBLOCK
4950     * @see #ANNOTATION_FIELD_DEF
4951     **/
4952    public static final int ANNOTATION_DEF =
4953        JavaLanguageLexer.ANNOTATION_DEF;
4954
4955    /**
4956     * An annotation field declaration.  The notable children are modifiers,
4957     * field type, field name and an optional default value (a conditional
4958     * compile-time constant expression). Default values may also be
4959     * annotations.
4960     *
4961     * <p>For example:</p>
4962     *
4963     * <pre>
4964     *     String someField() default "Hello world";
4965     * </pre>
4966     *
4967     * <p>parses as:</p>
4968     *
4969     * <pre>
4970     * ANNOTATION_FIELD_DEF -&gt; ANNOTATION_FIELD_DEF
4971     *  |--MODIFIERS -&gt; MODIFIERS
4972     *  |--TYPE -&gt; TYPE
4973     *  |   `--IDENT -&gt; String
4974     *  |--IDENT -&gt; someField
4975     *  |--LPAREN -&gt; (
4976     *  |--RPAREN -&gt; )
4977     *  |--LITERAL_DEFAULT -&gt; default
4978     *  |   `--EXPR -&gt; EXPR
4979     *  |       `--STRING_LITERAL -&gt; "Hello world"
4980     *  `--SEMI -&gt; ;
4981     * </pre>
4982     *
4983     * @see <a href="https://www.jcp.org/en/jsr/detail?id=201">
4984     *     JSR201</a>
4985     * @see #MODIFIERS
4986     * @see #TYPE
4987     * @see #LITERAL_DEFAULT
4988     */
4989    public static final int ANNOTATION_FIELD_DEF =
4990        JavaLanguageLexer.ANNOTATION_FIELD_DEF;
4991
4992    // note: &#064; is the html escape for '@',
4993    // used here to avoid confusing the javadoc tool
4994    /**
4995     * A collection of annotations on a package or enum constant.
4996     * A collections of annotations will only occur on these nodes
4997     * as all other nodes that may be qualified with an annotation can
4998     * be qualified with any other modifier and hence these annotations
4999     * would be contained in a {@link #MODIFIERS} node.
5000     *
5001     * <p>For example:</p>
5002     *
5003     * <pre>
5004     *     &#064;MyAnnotation package blah;
5005     * </pre>
5006     *
5007     * <p>parses as:</p>
5008     *
5009     * <pre>
5010     * PACKAGE_DEF -&gt; package
5011     *  |--ANNOTATIONS -&gt; ANNOTATIONS
5012     *  |   `--ANNOTATION -&gt; ANNOTATION
5013     *  |       |--AT -&gt; @
5014     *  |       `--IDENT -&gt; MyAnnotation
5015     *  |--IDENT -&gt; blah
5016     *  `--SEMI -&gt; ;
5017     * </pre>
5018     *
5019     * @see <a href="https://www.jcp.org/en/jsr/detail?id=201">
5020     *     JSR201</a>
5021     * @see #ANNOTATION
5022     * @see #AT
5023     * @see #IDENT
5024     */
5025    public static final int ANNOTATIONS =
5026        JavaLanguageLexer.ANNOTATIONS;
5027
5028    // note: &#064; is the html escape for '@',
5029    // used here to avoid confusing the javadoc tool
5030    /**
5031     * An annotation of a package, type, field, parameter or variable.
5032     * An annotation may occur anywhere modifiers occur (it is a
5033     * type of modifier) and may also occur prior to a package definition.
5034     * The notable children are: The annotation name and either a single
5035     * default annotation value or a sequence of name value pairs.
5036     * Annotation values may also be annotations themselves.
5037     *
5038     * <p>For example:</p>
5039     * <pre>
5040     *     &#064;MyAnnotation(someField1 = "Hello",
5041     *                    someField2 = &#064;SomeOtherAnnotation)
5042     * </pre>
5043     *
5044     * <p>parses as:</p>
5045     * <pre>
5046     * ANNOTATION -&gt; ANNOTATION
5047     *  |--AT -&gt; @
5048     *  |--IDENT -&gt; MyAnnotation
5049     *  |--LPAREN -&gt; (
5050     *  |--ANNOTATION_MEMBER_VALUE_PAIR -&gt; ANNOTATION_MEMBER_VALUE_PAIR
5051     *  |   |--IDENT -&gt; someField1
5052     *  |   |--ASSIGN -&gt; =
5053     *  |   `--EXPR -&gt; EXPR
5054     *  |       `--STRING_LITERAL -&gt; "Hello"
5055     *  |--COMMA -&gt; ,
5056     *  |--ANNOTATION_MEMBER_VALUE_PAIR -&gt; ANNOTATION_MEMBER_VALUE_PAIR
5057     *  |   |--IDENT -&gt; someField2
5058     *  |   |--ASSIGN -&gt; =
5059     *  |   `--ANNOTATION -&gt; ANNOTATION
5060     *  |       |--AT -&gt; @
5061     *  |       `--IDENT -&gt; SomeOtherAnnotation
5062     *  `--RPAREN -&gt; )
5063     * </pre>
5064     *
5065     * @see <a href="https://www.jcp.org/en/jsr/detail?id=201">
5066     *     JSR201</a>
5067     * @see #MODIFIERS
5068     * @see #IDENT
5069     * @see #ANNOTATION_MEMBER_VALUE_PAIR
5070     */
5071    public static final int ANNOTATION =
5072        JavaLanguageLexer.ANNOTATION;
5073
5074    /**
5075     * An initialization of an annotation member with a value.
5076     * Its children are the name of the member, the assignment literal
5077     * and the (compile-time constant conditional expression) value.
5078     *
5079     * <p>For example:</p>
5080     * <pre>
5081     * &#064;Annotation(
5082     *     value="123"
5083     * )
5084     * </pre>
5085     *
5086     * <p>parses as:</p>
5087     * <pre>
5088     * ANNOTATION -&gt; ANNOTATION
5089     *  |--AT -&gt; &#64;
5090     *  |--IDENT -&gt; Annotation
5091     *  |--LPAREN -&gt; (
5092     *  |--ANNOTATION_MEMBER_VALUE_PAIR -&gt; ANNOTATION_MEMBER_VALUE_PAIR
5093     *  |   |--IDENT -&gt; value
5094     *  |   |--ASSIGN -&gt; =
5095     *  |   `--EXPR -&gt; EXPR
5096     *  |       `--STRING_LITERAL -&gt; "123"
5097     *  `--RPAREN -&gt; )
5098     * </pre>
5099     *
5100     * @see <a href="https://www.jcp.org/en/jsr/detail?id=201">
5101     *     JSR201</a>
5102     * @see #ANNOTATION
5103     * @see #IDENT
5104     */
5105    public static final int ANNOTATION_MEMBER_VALUE_PAIR =
5106        JavaLanguageLexer.ANNOTATION_MEMBER_VALUE_PAIR;
5107
5108    /**
5109     * An annotation array member initialization.
5110     * Initializers can not be nested.
5111     * An initializer may be present as a default to an annotation
5112     * member, as the single default value to an annotation
5113     * (e.g. @Annotation({1,2})) or as the value of an annotation
5114     * member value pair.
5115     *
5116     * <p>For example:</p>
5117     * <pre>
5118     * &#64;Annotation({1, 2})
5119     * </pre>
5120     *
5121     * <p>parses as:</p>
5122     * <pre>
5123     * ANNOTATION -&gt; ANNOTATION
5124     *  |--AT -&gt; &#64;
5125     *  |--IDENT -&gt; Annotation
5126     *  |--LPAREN -&gt; (
5127     *  |--ANNOTATION_ARRAY_INIT -&gt; {
5128     *  |   |--EXPR -&gt; EXPR
5129     *  |   |   `--NUM_INT -&gt; 1
5130     *  |   |--COMMA -&gt; ,
5131     *  |   |--EXPR -&gt; EXPR
5132     *  |   |   `--NUM_INT -&gt; 2
5133     *  |   `--RCURLY -&gt; }
5134     *  `--RPAREN -&gt; )
5135     * </pre>
5136     *
5137     * @see <a href="https://www.jcp.org/en/jsr/detail?id=201">
5138     *     JSR201</a>
5139     * @see #ANNOTATION
5140     * @see #IDENT
5141     * @see #ANNOTATION_MEMBER_VALUE_PAIR
5142     */
5143    public static final int ANNOTATION_ARRAY_INIT =
5144        JavaLanguageLexer.ANNOTATION_ARRAY_INIT;
5145
5146    /**
5147     * A list of type parameters to a class, interface or
5148     * method definition. Children are LT, at least one
5149     * TYPE_PARAMETER, zero or more of: a COMMAs followed by a single
5150     * TYPE_PARAMETER and a final GT.
5151     *
5152     * <p>For example:</p>
5153     *
5154     * <pre>
5155     * public class MyClass&lt;A, B&gt; {
5156     *
5157     * }
5158     * </pre>
5159     *
5160     * <p>parses as:</p>
5161     *
5162     * <pre>
5163     * CLASS_DEF -&gt; CLASS_DEF
5164     * |--MODIFIERS -&gt; MODIFIERS
5165     * |   `--LITERAL_PUBLIC -&gt; public
5166     * |--LITERAL_CLASS -&gt; class
5167     * |--IDENT -&gt; MyClass
5168     * |--TYPE_PARAMETERS -&gt; TYPE_PARAMETERS
5169     * |   |--GENERIC_START -&gt; &lt;
5170     * |   |--TYPE_PARAMETER -&gt; TYPE_PARAMETER
5171     * |   |   `--IDENT -&gt; A
5172     * |   |--COMMA -&gt; ,
5173     * |   |--TYPE_PARAMETER -&gt; TYPE_PARAMETER
5174     * |   |   `--IDENT -&gt; B
5175     * |   `--GENERIC_END -&gt; &gt;
5176     * `--OBJBLOCK -&gt; OBJBLOCK
5177     *     |--LCURLY -&gt; {
5178     *     `--RCURLY -&gt; }
5179     * </pre>
5180     *
5181     * @see <a href="https://docs.oracle.com/javase/specs/jls/se11/html/jls-8.html#jls-8.1.2">
5182     *     Generic Classes and Type Parameters</a>
5183     * @see #GENERIC_START
5184     * @see #GENERIC_END
5185     * @see #TYPE_PARAMETER
5186     * @see #COMMA
5187     */
5188    public static final int TYPE_PARAMETERS =
5189        JavaLanguageLexer.TYPE_PARAMETERS;
5190
5191    /**
5192     * A type parameter to a class, interface or method definition.
5193     * Children are the type name and an optional TYPE_UPPER_BOUNDS.
5194     *
5195     * <p>For example:</p>
5196     *
5197     * <pre>
5198     * public class MyClass &lt;A extends Collection&gt; {
5199     *
5200     * }
5201     * </pre>
5202     *
5203     * <p>parses as:</p>
5204     *
5205     * <pre>
5206     * CLASS_DEF -&gt; CLASS_DEF
5207     * |--MODIFIERS -&gt; MODIFIERS
5208     * |   `--LITERAL_PUBLIC -&gt; public
5209     * |--LITERAL_CLASS -&gt; class
5210     * |--IDENT -&gt; MyClass
5211     * |--TYPE_PARAMETERS -&gt; TYPE_PARAMETERS
5212     * |   |--GENERIC_START -&gt; &lt;
5213     * |   |--TYPE_PARAMETER -&gt; TYPE_PARAMETER
5214     * |   |   |--IDENT -&gt; A
5215     * |   |   `--TYPE_UPPER_BOUNDS -&gt; extends
5216     * |   |       `--IDENT -&gt; Collection
5217     * |   `--GENERIC_END -&gt; &gt;
5218     * `--OBJBLOCK -&gt; OBJBLOCK
5219     *     |--LCURLY -&gt; {
5220     *     `--RCURLY -&gt; }
5221     * </pre>
5222     *
5223     * @see <a href="https://docs.oracle.com/javase/specs/jls/se11/html/jls-8.html#jls-8.1.2">
5224     *     Generic Classes and Type Parameters</a>
5225     * @see #IDENT
5226     * @see #WILDCARD_TYPE
5227     * @see #TYPE_UPPER_BOUNDS
5228     */
5229    public static final int TYPE_PARAMETER =
5230        JavaLanguageLexer.TYPE_PARAMETER;
5231
5232    /**
5233     * A list of type arguments to a type reference or
5234     * a method/ctor invocation. Children are GENERIC_START, at least one
5235     * TYPE_ARGUMENT, zero or more of a COMMAs followed by a single
5236     * TYPE_ARGUMENT, and a final GENERIC_END.
5237     *
5238     * <p>For example:</p>
5239     *
5240     * <pre>
5241     *     public Collection&lt;?&gt; a;
5242     * </pre>
5243     *
5244     * <p>parses as:</p>
5245     *
5246     * <pre>
5247     * VARIABLE_DEF -&gt; VARIABLE_DEF
5248     *  |--MODIFIERS -&gt; MODIFIERS
5249     *  |   `--LITERAL_PUBLIC -&gt; public
5250     *  |--TYPE -&gt; TYPE
5251     *  |   |--IDENT -&gt; Collection
5252     *  |   `--TYPE_ARGUMENTS -&gt; TYPE_ARGUMENTS
5253     *  |       |--GENERIC_START -&gt; &lt;
5254     *  |       |--TYPE_ARGUMENT -&gt; TYPE_ARGUMENT
5255     *  |       |   `--WILDCARD_TYPE -&gt; ?
5256     *  |       `--GENERIC_END -&gt; &gt;
5257     *  |--IDENT -&gt; a
5258     *  `--SEMI -&gt; ;
5259     * </pre>
5260     *
5261     * @see #GENERIC_START
5262     * @see #GENERIC_END
5263     * @see #TYPE_ARGUMENT
5264     * @see #COMMA
5265     */
5266    public static final int TYPE_ARGUMENTS =
5267        JavaLanguageLexer.TYPE_ARGUMENTS;
5268
5269    /**
5270     * A type arguments to a type reference or a method/ctor invocation.
5271     * Children are either: type name or wildcard type with possible type
5272     * upper or lower bounds.
5273     *
5274     * <p>For example:</p>
5275     * <pre>List&lt;? super List&gt; list;</pre>
5276     *
5277     * <p>parses as:</p>
5278     * <pre>
5279     * VARIABLE_DEF -&gt; VARIABLE_DEF
5280     *  |--MODIFIERS -&gt; MODIFIERS
5281     *  |--TYPE -&gt; TYPE
5282     *  |   |--IDENT -&gt; List
5283     *  |   `--TYPE_ARGUMENTS -&gt; TYPE_ARGUMENTS
5284     *  |       |--GENERIC_START -&gt; &lt;
5285     *  |       |--TYPE_ARGUMENT -&gt; TYPE_ARGUMENT
5286     *  |       |   |--WILDCARD_TYPE -&gt; ?
5287     *  |       |   `--TYPE_LOWER_BOUNDS -&gt; super
5288     *  |       |       `--IDENT -&gt; List
5289     *  |       `--GENERIC_END -&gt; &gt;
5290     *  |--IDENT -&gt; list
5291     *  `--SEMI -&gt; ;
5292     * </pre>
5293     *
5294     * @see <a href="https://docs.oracle.com/javase/specs/jls/se11/html/jls-8.html#jls-8.1.2">
5295     *     Generic Classes and Type Parameters</a>
5296     * @see #WILDCARD_TYPE
5297     * @see #TYPE_UPPER_BOUNDS
5298     * @see #TYPE_LOWER_BOUNDS
5299     */
5300    public static final int TYPE_ARGUMENT =
5301        JavaLanguageLexer.TYPE_ARGUMENT;
5302
5303    /**
5304     * The type that refers to all types. This node has no children.
5305     *
5306     * <p>For example: </p>
5307     * <pre>
5308     *
5309     * List&lt;?&gt; list;
5310     * </pre>
5311     *
5312     * <p>parses as:</p>
5313     * <pre>
5314     * |--VARIABLE_DEF -&gt; VARIABLE_DEF
5315     * |   |--MODIFIERS -&gt; MODIFIERS
5316     * |   |--TYPE -&gt; TYPE
5317     * |   |   |--IDENT -&gt; List
5318     * |   |   |`--TYPE_ARGUMENTS -&gt; TYPE_ARGUMENTS
5319     * |   |        |--GENERIC_START -&gt; &lt;
5320     * |   |        |--TYPE_ARGUMENT -&gt; TYPE_ARGUMENT
5321     * |   |        |  `--WILDCARD_TYPE -&gt; ?
5322     * |   |        `--GENERIC_END -&gt; &gt;
5323     * |   `--IDENT -&gt; list
5324     * |--SEMI -&gt; ;
5325     * </pre>
5326     *
5327     * @see <a href="https://docs.oracle.com/javase/specs/jls/se11/html/jls-8.html#jls-8.1.2">
5328     *     Generic Classes and Type Parameters</a>
5329     * @see #TYPE_ARGUMENT
5330     * @see #TYPE_UPPER_BOUNDS
5331     * @see #TYPE_LOWER_BOUNDS
5332     */
5333    public static final int WILDCARD_TYPE =
5334        JavaLanguageLexer.WILDCARD_TYPE;
5335
5336    /**
5337     * An upper bounds on a wildcard type argument or type parameter.
5338     * This node has one child - the type that is being used for
5339     * the bounding.
5340     *
5341     * <p>For example:</p>
5342     * <pre>List&lt;? extends Number&gt; list;</pre>
5343     *
5344     * <p>parses as:</p>
5345     * <pre>
5346     * --VARIABLE_DEF -&gt; VARIABLE_DEF
5347     *  |--MODIFIERS -&gt; MODIFIERS
5348     *  |--TYPE -&gt; TYPE
5349     *  |   |--IDENT -&gt; List
5350     *  |   `--TYPE_ARGUMENTS -&gt; TYPE_ARGUMENTS
5351     *  |       |--GENERIC_START -&gt; &lt;
5352     *  |       |--TYPE_ARGUMENT -&gt; TYPE_ARGUMENT
5353     *  |       |   |--WILDCARD_TYPE -&gt; ?
5354     *  |       |   `--TYPE_UPPER_BOUNDS -&gt; extends
5355     *  |       |       `--IDENT -&gt; Number
5356     *  |       `--GENERIC_END -&gt; &gt;
5357     *  |--IDENT -&gt; list
5358     *  `--SEMI -&gt; ;
5359     *  </pre>
5360     *
5361     * @see <a href="https://docs.oracle.com/javase/specs/jls/se11/html/jls-8.html#jls-8.1.2">
5362     *     Generic Classes and Type Parameters</a>
5363     * @see #TYPE_PARAMETER
5364     * @see #TYPE_ARGUMENT
5365     * @see #WILDCARD_TYPE
5366     */
5367    public static final int TYPE_UPPER_BOUNDS =
5368        JavaLanguageLexer.TYPE_UPPER_BOUNDS;
5369
5370    /**
5371     * A lower bounds on a wildcard type argument. This node has one child
5372     *  - the type that is being used for the bounding.
5373     *
5374     *  <p>For example:</p>
5375     *  <pre>List&lt;? super Integer&gt; list;</pre>
5376     *
5377     *  <p>parses as:</p>
5378     *  <pre>
5379     *  --VARIABLE_DEF -&gt; VARIABLE_DEF
5380     *     |--MODIFIERS -&gt; MODIFIERS
5381     *     |--TYPE -&gt; TYPE
5382     *     |   |--IDENT -&gt; List
5383     *     |   `--TYPE_ARGUMENTS -&gt; TYPE_ARGUMENTS
5384     *     |       |--GENERIC_START -&gt; &lt;
5385     *     |       |--TYPE_ARGUMENT -&gt; TYPE_ARGUMENT
5386     *     |       |   |--WILDCARD_TYPE -&gt; ?
5387     *     |       |   `--TYPE_LOWER_BOUNDS -&gt; super
5388     *     |       |       `--IDENT -&gt; Integer
5389     *     |       `--GENERIC_END -&gt; &gt;
5390     *     |--IDENT -&gt; list
5391     *     `--SEMI -&gt; ;
5392     *  </pre>
5393     *
5394     * @see <a href="https://docs.oracle.com/javase/specs/jls/se11/html/jls-8.html#jls-8.1.2">
5395     *     Generic Classes and Type Parameters</a>
5396     * @see #TYPE_ARGUMENT
5397     * @see #WILDCARD_TYPE
5398     */
5399    public static final int TYPE_LOWER_BOUNDS =
5400        JavaLanguageLexer.TYPE_LOWER_BOUNDS;
5401
5402    /**
5403     * An {@code @} symbol - signifying an annotation instance or the prefix
5404     * to the interface literal signifying the definition of an annotation
5405     * declaration.
5406     *
5407     * <p>For example:</p>
5408     * <pre>
5409     * &#64;Deprecated
5410     * private int value;
5411     * </pre>
5412     *
5413     * <p>parses as:</p>
5414     * <pre>
5415     * VARIABLE_DEF -&gt; VARIABLE_DEF
5416     * |--MODIFIERS -&gt; MODIFIERS
5417     * |  |--ANNOTATION -&gt; ANNOTATION
5418     * |  |  |--AT -&gt; &#64;
5419     * |  |  `--IDENT -&gt; Deprecated
5420     * |  `--LITERAL_PRIVATE -&gt; private
5421     * |--TYPE -&gt; TYPE
5422     * |  `--LITERAL_INT -&gt; int
5423     * |--IDENT -&gt; value
5424     * `--SEMI -&gt; ;
5425     * </pre>
5426     *
5427     * @see <a href="https://www.jcp.org/en/jsr/detail?id=201">
5428     *     JSR201</a>
5429     */
5430    public static final int AT = JavaLanguageLexer.AT;
5431
5432    /**
5433     * A triple dot for variable-length parameters. This token only ever occurs
5434     * in a parameter declaration immediately after the type of the parameter.
5435     *
5436     * <p>For example:</p>
5437     * <pre>
5438     *  public void myShape(int... dimension) {
5439     *
5440     *  }
5441     * </pre>
5442     *
5443     * <p>parses as:</p>
5444     * <pre>
5445     * METHOD_DEF -&gt; METHOD_DEF
5446     *   |--MODIFIERS -&gt; MODIFIERS
5447     *   |   `--LITERAL_PUBLIC -&gt; public
5448     *   |--TYPE -&gt; TYPE
5449     *   |   `--LITERAL_VOID -&gt; void
5450     *   |--IDENT -&gt; myShape
5451     *   |--LPAREN -&gt; (
5452     *   |--PARAMETERS -&gt; PARAMETERS
5453     *   |   `--PARAMETER_DEF -&gt; PARAMETER_DEF
5454     *   |       |--MODIFIERS -&gt; MODIFIERS
5455     *   |       |--TYPE -&gt; TYPE
5456     *   |       |   `--LITERAL_INT -&gt; int
5457     *   |       |--ELLIPSIS -&gt; ...
5458     *   |       `--IDENT -&gt; dimension
5459     *   |--RPAREN -&gt; )
5460     *   `--SLIST -&gt; {
5461     *       `--RCURLY -&gt; }
5462     * </pre>
5463     *
5464     * @see <a href="https://www.jcp.org/en/jsr/detail?id=201">
5465     *     JSR201</a>
5466     */
5467    public static final int ELLIPSIS = JavaLanguageLexer.ELLIPSIS;
5468
5469    /**
5470     * The {@code &} symbol when used to extend a generic upper or lower bounds constrain
5471     * or a type cast expression with an additional interface.
5472     *
5473     * <p>Generic type bounds extension:
5474     * {@code class Comparable<T extends Serializable & CharSequence>}</p>
5475     * <pre>
5476     * CLASS_DEF -&gt; CLASS_DEF
5477     * |--MODIFIERS -&gt; MODIFIERS
5478     * |--LITERAL_CLASS -&gt; class
5479     * |--IDENT -&gt; Comparable
5480     * |--TYPE_PARAMETERS -&gt; TYPE_PARAMETERS
5481     *     |--GENERIC_START -&gt; &lt;
5482     *     |--TYPE_PARAMETER -&gt; TYPE_PARAMETER
5483     *     |   |--IDENT -&gt; T
5484     *     |   `--TYPE_UPPER_BOUNDS -&gt; extends
5485     *     |       |--IDENT -&gt; Serializable
5486     *     |       |--TYPE_EXTENSION_AND -&gt; &#38;
5487     *     |       `--IDENT -&gt; CharSequence
5488     *     `--GENERIC_END -&gt; &gt;
5489     * </pre>
5490     *
5491     * <p>Type cast extension:
5492     * {@code return (Serializable & CharSequence) null;}</p>
5493     * <pre>
5494     * --LITERAL_RETURN -&gt; return
5495     *    |--EXPR -&gt; EXPR
5496     *    |   `--TYPECAST -&gt; (
5497     *    |       |--TYPE -&gt; TYPE
5498     *    |       |   `--IDENT -&gt; Serializable
5499     *    |       |--TYPE_EXTENSION_AND -&gt; &#38;
5500     *    |       |--TYPE -&gt; TYPE
5501     *    |       |   `--IDENT -&gt; CharSequence
5502     *    |       |--RPAREN -&gt; )
5503     *    |       `--LITERAL_NULL -&gt; null
5504     *    `--SEMI -&gt; ;
5505     * </pre>
5506     *
5507     * @see #EXTENDS_CLAUSE
5508     * @see #TYPECAST
5509     * @see <a href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.4">
5510     *     Java Language Specification, &sect;4.4</a>
5511     * @see <a href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.16">
5512     *     Java Language Specification, &sect;15.16</a>
5513     */
5514    public static final int TYPE_EXTENSION_AND =
5515        JavaLanguageLexer.TYPE_EXTENSION_AND;
5516
5517    /**
5518     * A {@code <} symbol signifying the start of type arguments or type parameters.
5519     *
5520     * <p>For example:</p>
5521     * <pre>
5522     * class Test&lt;T&gt; {}
5523     * </pre>
5524     *
5525     * <p>parses as:</p>
5526     * <pre>
5527     * CLASS_DEF -&gt; CLASS_DEF
5528     *  |--MODIFIERS -&gt; MODIFIERS
5529     *  |--LITERAL_CLASS -&gt; class
5530     *  |--IDENT -&gt; Test
5531     *  |--TYPE_PARAMETERS -&gt; TYPE_PARAMETERS
5532     *  |   |--GENERIC_START -&gt; &lt;
5533     *  |   |--TYPE_PARAMETER -&gt; TYPE_PARAMETER
5534     *  |   |   `--IDENT -&gt; T
5535     *  |   `--GENERIC_END -&gt; &gt;
5536     *  `--OBJBLOCK -&gt; OBJBLOCK
5537     *      |--LCURLY -&gt; {
5538     *      `--RCURLY -&gt; }
5539     * </pre>
5540     *
5541     * @see #MODIFIERS
5542     * @see #IDENT
5543     * @see #OBJBLOCK
5544     * @see #TYPE_PARAMETERS
5545     * @see #GENERIC_END
5546     */
5547    public static final int GENERIC_START =
5548        JavaLanguageLexer.GENERIC_START;
5549
5550    /**
5551     * A {@code >} symbol signifying the end of type arguments or type parameters.
5552     *
5553     * <p>For example:</p>
5554     * <pre>
5555     * class Test&lt;T&gt; {}
5556     * </pre>
5557     *
5558     * <p>parses as:</p>
5559     * <pre>
5560     * CLASS_DEF -&gt; CLASS_DEF
5561     *  |--MODIFIERS -&gt; MODIFIERS
5562     *  |--LITERAL_CLASS -&gt; class
5563     *  |--IDENT -&gt; Test
5564     *  |--TYPE_PARAMETERS -&gt; TYPE_PARAMETERS
5565     *  |   |--GENERIC_START -&gt; &lt;
5566     *  |   |--TYPE_PARAMETER -&gt; TYPE_PARAMETER
5567     *  |   |   `--IDENT -&gt; T
5568     *  |   `--GENERIC_END -&gt; &gt;
5569     *  `--OBJBLOCK -&gt; OBJBLOCK
5570     *      |--LCURLY -&gt; {
5571     *      `--RCURLY -&gt; }
5572     * </pre>
5573     *
5574     * @see #MODIFIERS
5575     * @see #IDENT
5576     * @see #OBJBLOCK
5577     * @see #TYPE_PARAMETERS
5578     * @see #GENERIC_START
5579     */
5580    public static final int GENERIC_END = JavaLanguageLexer.GENERIC_END;
5581
5582    /**
5583     * Special lambda symbol {@code ->}.
5584     *
5585     * <p>For example:</p>
5586     * <pre>
5587     * numbers.forEach((n) -&gt; System.out.println(n));
5588     * </pre>
5589     *
5590     * <p>parses as:</p>
5591     * <pre>
5592     * METHOD_CALL -&gt; (
5593     *  |--DOT -&gt; .
5594     *  |   |--IDENT -&gt; numbers
5595     *  |   `--IDENT -&gt; forEach
5596     *  |--ELIST -&gt; ELIST
5597     *  |   `--LAMBDA -&gt; -&gt;
5598     *  |       |--LPAREN -&gt; (
5599     *  |       |--PARAMETERS -&gt; PARAMETERS
5600     *  |       |   `--PARAMETER_DEF -&gt; PARAMETER_DEF
5601     *  |       |       |--MODIFIERS -&gt; MODIFIERS
5602     *  |       |       |--TYPE -&gt; TYPE
5603     *  |       |       `--IDENT -&gt; n
5604     *  |       |--RPAREN -&gt; )
5605     *  |       `--EXPR -&gt; EXPR
5606     *  |           `--METHOD_CALL -&gt; (
5607     *  |               |--DOT -&gt; .
5608     *  |               |   |--DOT -&gt; .
5609     *  |               |   |   |--IDENT -&gt; System
5610     *  |               |   |   `--IDENT -&gt; out
5611     *  |               |   `--IDENT -&gt; println
5612     *  |               |--ELIST -&gt; ELIST
5613     *  |               |   `--EXPR -&gt; EXPR
5614     *  |               |       `--IDENT -&gt; n
5615     *  |               `--RPAREN -&gt; )
5616     *  `--RPAREN -&gt; )
5617     * </pre>
5618     *
5619     */
5620    public static final int LAMBDA = JavaLanguageLexer.LAMBDA;
5621
5622    /**
5623     * Beginning of single-line comment: '//'.
5624     *
5625     * <pre>
5626     * SINGLE_LINE_COMMENT -&gt; //
5627     *  `--COMMENT_CONTENT -&gt; \r\n
5628     * </pre>
5629     *
5630     * <p>For example:</p>
5631     * <pre>
5632     * // Comment content
5633     * </pre>
5634     *
5635     * <p>parses as:</p>
5636     * <pre>
5637     * SINGLE_LINE_COMMENT -&gt; //
5638     *  `--COMMENT_CONTENT -&gt;  Comment Content\n
5639     * </pre>
5640     */
5641    public static final int SINGLE_LINE_COMMENT =
5642            JavaLanguageLexer.SINGLE_LINE_COMMENT;
5643
5644    /**
5645     * Beginning of block comment: '/*'.
5646     *
5647     * <p>For example:</p>
5648     * <pre>
5649     * /&#42; Comment content
5650     * &#42;/
5651     * </pre>
5652     *
5653     * <p>parses as:</p>
5654     * <pre>
5655     * --BLOCK_COMMENT_BEGIN -&gt; /&#42;
5656     *    |--COMMENT_CONTENT -&gt;  Comment content\r\n
5657     *    `--BLOCK_COMMENT_END -&gt; &#42;/
5658     * </pre>
5659     */
5660    public static final int BLOCK_COMMENT_BEGIN =
5661            JavaLanguageLexer.BLOCK_COMMENT_BEGIN;
5662
5663    /**
5664     * End of block comment: '&#42;/'.
5665     *
5666     * <p>For example:</p>
5667     * <pre>
5668     * /&#42;comment&#42;/
5669     * </pre>
5670     *
5671     * <p>parses as:</p>
5672     * <pre>
5673     * BLOCK_COMMENT_BEGIN -&gt; /&#42;
5674     *  |--COMMENT_CONTENT -&gt; comment
5675     *  `--BLOCK_COMMENT_END -&gt; &#42;/
5676     * </pre>
5677     *
5678     */
5679    public static final int BLOCK_COMMENT_END =
5680            JavaLanguageLexer.BLOCK_COMMENT_END;
5681
5682    /**
5683     * Text of single-line or block comment.
5684     *
5685     * <p>For example:</p>
5686     * <pre>
5687     * //this is single-line comment
5688     *
5689     * /&#42;
5690     * this is multiline comment
5691     * &#42;/
5692     * </pre>
5693     *
5694     * <p>parses as:</p>
5695     * <pre>
5696     * |--SINGLE_LINE_COMMENT -&gt; //
5697     * |   `--COMMENT_CONTENT -&gt; this is single-line comment\n
5698     * |--BLOCK_COMMENT_BEGIN -&gt; /&#42;
5699     * |   |--COMMENT_CONTENT -&gt; \n\t\t\tthis is multiline comment\n\t\t
5700     * |   `--BLOCK_COMMENT_END -&gt; &#42;/
5701     * </pre>
5702     *
5703     */
5704    public static final int COMMENT_CONTENT =
5705            JavaLanguageLexer.COMMENT_CONTENT;
5706
5707    /**
5708     * A pattern variable definition; when conditionally matched,
5709     * this variable is assigned with the defined type.
5710     *
5711     * <p>For example:</p>
5712     * <pre>
5713     * if (obj instanceof String str) { }
5714     * </pre>
5715     *
5716     * <p>parses as:</p>
5717     * <pre>
5718     * LITERAL_IF -&gt; if
5719     *  |--LPAREN -&gt; (
5720     *  |--EXPR -&gt; EXPR
5721     *  |   `--LITERAL_INSTANCEOF -&gt; instanceof
5722     *  |       |--IDENT -&gt; obj
5723     *  |       `--PATTERN_VARIABLE_DEF -&gt; PATTERN_VARIABLE_DEF
5724     *  |           |--TYPE -&gt; TYPE
5725     *  |           |   `--IDENT -&gt; String
5726     *  |           `--IDENT -&gt; str
5727     *  |--RPAREN -&gt; )
5728     *  `--SLIST -&gt; {
5729     *      `--RCURLY -&gt; }
5730     * </pre>
5731     *
5732     * @see #LITERAL_INSTANCEOF
5733     * @since 8.35
5734     */
5735    public static final int PATTERN_VARIABLE_DEF =
5736            JavaLanguageLexer.PATTERN_VARIABLE_DEF;
5737
5738    /**
5739     * The {@code record} keyword.  This element appears
5740     * as part of a record declaration.
5741     *
5742     * <p>For example:</p>
5743     * <pre>
5744     * public record MyRecord () {
5745     *
5746     * }
5747     * </pre>
5748     *
5749     * <p>parses as:</p>
5750     * <pre>
5751     * RECORD_DEF -&gt; RECORD_DEF
5752     * |--MODIFIERS -&gt; MODIFIERS
5753     * |   `--LITERAL_PUBLIC -&gt; public
5754     * |--LITERAL_RECORD -&gt; record
5755     * |--IDENT -&gt; MyRecord
5756     * |--LPAREN -&gt; (
5757     * |--RECORD_COMPONENTS -&gt; RECORD_COMPONENTS
5758     * |--RPAREN -&gt; )
5759     * `--OBJBLOCK -&gt; OBJBLOCK
5760     *     |--LCURLY -&gt; {
5761     *     `--RCURLY -&gt; }
5762     * </pre>
5763     *
5764     * @since 8.35
5765     **/
5766    public static final int LITERAL_RECORD =
5767            JavaLanguageLexer.LITERAL_RECORD;
5768
5769    /**
5770     * A declaration of a record specifies a name, a header, and a body.
5771     * The header lists the components of the record, which are the variables
5772     * that make up its state.
5773     *
5774     * <p>For example:</p>
5775     * <pre>
5776     * public record MyRecord () {
5777     *
5778     * }
5779     * </pre>
5780     *
5781     * <p>parses as:</p>
5782     * <pre>
5783     * RECORD_DEF -&gt; RECORD_DEF
5784     * |--MODIFIERS -&gt; MODIFIERS
5785     * |   `--LITERAL_PUBLIC -&gt; public
5786     * |--LITERAL_RECORD -&gt; record
5787     * |--IDENT -&gt; MyRecord
5788     * |--LPAREN -&gt; (
5789     * |--RECORD_COMPONENTS -&gt; RECORD_COMPONENTS
5790     * |--RPAREN -&gt; )
5791     * `--OBJBLOCK -&gt; OBJBLOCK
5792     *     |--LCURLY -&gt; {
5793     *     `--RCURLY -&gt; }
5794     * </pre>
5795     *
5796     * @since 8.35
5797     */
5798    public static final int RECORD_DEF =
5799            JavaLanguageLexer.RECORD_DEF;
5800
5801    /**
5802     * Record components are a (possibly empty) list containing the components of a record, which
5803     * are the variables that make up its state.
5804     *
5805     * <p>For example:</p>
5806     * <pre>
5807     * public record myRecord (Comp x, Comp y) { }
5808     * </pre>
5809     *
5810     * <p>parses as:</p>
5811     * <pre>
5812     * RECORD_DEF -&gt; RECORD_DEF
5813     *  |--MODIFIERS -&gt; MODIFIERS
5814     *  |   `--LITERAL_PUBLIC -&gt; public
5815     *  |--LITERAL_RECORD -&gt; record
5816     *  |--IDENT -&gt; myRecord
5817     *  |--LPAREN -&gt; (
5818     *  |--RECORD_COMPONENTS -&gt; RECORD_COMPONENTS
5819     *  |   |--RECORD_COMPONENT_DEF -&gt; RECORD_COMPONENT_DEF
5820     *  |   |   |--ANNOTATIONS -&gt; ANNOTATIONS
5821     *  |   |   |--TYPE -&gt; TYPE
5822     *  |   |   |   `--IDENT -&gt; Comp
5823     *  |   |   `--IDENT -&gt; x
5824     *  |   |--COMMA -&gt; ,
5825     *  |   `--RECORD_COMPONENT_DEF -&gt; RECORD_COMPONENT_DEF
5826     *  |       |--ANNOTATIONS -&gt; ANNOTATIONS
5827     *  |       |--TYPE -&gt; TYPE
5828     *  |       |   `--IDENT -&gt; Comp
5829     *  |       `--IDENT -&gt; y
5830     *  |--RPAREN -&gt; )
5831     *  `--OBJBLOCK -&gt; OBJBLOCK
5832     *      |--LCURLY -&gt; {
5833     *      `--RCURLY -&gt; }
5834     * </pre>
5835     *
5836     * @since 8.36
5837     */
5838    public static final int RECORD_COMPONENTS =
5839            JavaLanguageLexer.RECORD_COMPONENTS;
5840
5841    /**
5842     * A record component is a variable that comprises the state of a record.  Record components
5843     * have annotations (possibly), a type definition, and an identifier.  They can also be of
5844     * variable arity ('...').
5845     *
5846     * <p>For example:</p>
5847     * <pre>
5848     * public record MyRecord(Comp x, Comp... comps) {
5849     *
5850     * }
5851     * </pre>
5852     *
5853     * <p>parses as:</p>
5854     * <pre>
5855     * RECORD_DEF -&gt; RECORD_DEF
5856     * |--MODIFIERS -&gt; MODIFIERS
5857     * |   `--LITERAL_PUBLIC -&gt; public
5858     * |--LITERAL_RECORD -&gt; record
5859     * |--IDENT -&gt; MyRecord
5860     * |--LPAREN -&gt; (
5861     * |--RECORD_COMPONENTS -&gt; RECORD_COMPONENTS
5862     * |   |--RECORD_COMPONENT_DEF -&gt; RECORD_COMPONENT_DEF
5863     * |   |   |--ANNOTATIONS -&gt; ANNOTATIONS
5864     * |   |   |--TYPE -&gt; TYPE
5865     * |   |   |   `--IDENT -&gt; Comp
5866     * |   |   `--IDENT -&gt; x
5867     * |   |--COMMA -&gt; ,
5868     * |   `--RECORD_COMPONENT_DEF -&gt; RECORD_COMPONENT_DEF
5869     * |       |--ANNOTATIONS -&gt; ANNOTATIONS
5870     * |       |--TYPE -&gt; TYPE
5871     * |       |   `--IDENT -&gt; Comp
5872     * |       |--ELLIPSIS -&gt; ...
5873     * |       `--IDENT -&gt; comps
5874     * |--RPAREN -&gt; )
5875     * `--OBJBLOCK -&gt; OBJBLOCK
5876     *     |--LCURLY -&gt; {
5877     *     `--RCURLY -&gt; }
5878     * </pre>
5879     *
5880     * @since 8.36
5881     */
5882    public static final int RECORD_COMPONENT_DEF =
5883            JavaLanguageLexer.RECORD_COMPONENT_DEF;
5884
5885    /**
5886     * A compact canonical constructor eliminates the list of formal parameters; they are
5887     * declared implicitly.
5888     *
5889     * <p>For example:</p>
5890     * <pre>
5891     * public record myRecord () {
5892     *     public myRecord{}
5893     * }
5894     * </pre>
5895     *
5896     * <p>parses as:</p>
5897     * <pre>
5898     * RECORD_DEF
5899     * |--MODIFIERS
5900     * |   `--LITERAL_PUBLIC (public)
5901     * |--LITERAL_RECORD (record)
5902     * |--IDENT (myRecord)
5903     * |--LPAREN (()
5904     * |--RECORD_COMPONENTS
5905     * |--RPAREN ())
5906     * `--OBJBLOCK
5907     *     |--LCURLY ({)
5908     *     |--COMPACT_CTOR_DEF
5909     *     |   |--MODIFIERS
5910     *     |   |   `--LITERAL_PUBLIC (public)
5911     *     |   |--IDENT (myRecord)
5912     *     |   `--SLIST ({)
5913     *     |       `--RCURLY (})
5914     *     `--RCURLY (})
5915     * </pre>
5916     *
5917     * @since 8.36
5918     */
5919    public static final int COMPACT_CTOR_DEF =
5920            JavaLanguageLexer.COMPACT_CTOR_DEF;
5921
5922    /**
5923     * Text blocks are a new feature added to to Java SE 15 and later
5924     * that will make writing multi-line strings much easier and cleaner.
5925     * Beginning of a Java 15 Text Block literal,
5926     * delimited by three double quotes.
5927     *
5928     * <p>For example:</p>
5929     * <pre>
5930     *         String hello = """
5931     *                 Hello, world!
5932     *                 """;
5933     * </pre>
5934     *
5935     * <p>parses as:</p>
5936     * <pre>
5937     * |--VARIABLE_DEF -&gt; VARIABLE_DEF
5938     * |   |--MODIFIERS -&gt; MODIFIERS
5939     * |   |--TYPE -&gt; TYPE
5940     * |   |   `--IDENT -&gt; String
5941     * |   |--IDENT -&gt; hello
5942     * |   `--ASSIGN -&gt; =
5943     * |       `--EXPR -&gt; EXPR
5944     * |           `--TEXT_BLOCK_LITERAL_BEGIN -&gt; """
5945     * |               |--TEXT_BLOCK_CONTENT -&gt; \n                Hello, world!\n
5946     * |               `--TEXT_BLOCK_LITERAL_END -&gt; """
5947     * `--SEMI -&gt; ;
5948     * </pre>
5949     *
5950     * @since 8.36
5951     */
5952    public static final int TEXT_BLOCK_LITERAL_BEGIN =
5953            JavaLanguageLexer.TEXT_BLOCK_LITERAL_BEGIN;
5954
5955    /**
5956     * Content of a Java 15 text block. This is a
5957     * sequence of characters, possibly escaped with '\'. Actual line terminators
5958     * are represented by '\n'.
5959     *
5960     * <p>For example:</p>
5961     * <pre>
5962     *         String hello = """
5963     *                 Hello, world!
5964     *                 """;
5965     * </pre>
5966     *
5967     * <p>parses as:</p>
5968     * <pre>
5969     * |--VARIABLE_DEF -&gt; VARIABLE_DEF
5970     * |   |--MODIFIERS -&gt; MODIFIERS
5971     * |   |--TYPE -&gt; TYPE
5972     * |   |   `--IDENT -&gt; String
5973     * |   |--IDENT -&gt; hello
5974     * |   `--ASSIGN -&gt; =
5975     * |       `--EXPR -&gt; EXPR
5976     * |           `--TEXT_BLOCK_LITERAL_BEGIN -&gt; """
5977     * |               |--TEXT_BLOCK_CONTENT -&gt; \n                Hello, world!\n
5978     * |               `--TEXT_BLOCK_LITERAL_END -&gt; """
5979     * `--SEMI -&gt; ;
5980     * </pre>
5981     *
5982     * @since 8.36
5983     */
5984    public static final int TEXT_BLOCK_CONTENT =
5985            JavaLanguageLexer.TEXT_BLOCK_CONTENT;
5986
5987    /**
5988     * End of a Java 15 text block literal, delimited by three
5989     * double quotes.
5990     *
5991     * <p>For example:</p>
5992     * <pre>
5993     *         String hello = """
5994     *                 Hello, world!
5995     *                 """;
5996     * </pre>
5997     *
5998     * <p>parses as:</p>
5999     * <pre>
6000     * |--VARIABLE_DEF -&gt; VARIABLE_DEF
6001     * |   |--MODIFIERS -&gt; MODIFIERS
6002     * |   |--TYPE -&gt; TYPE
6003     * |   |   `--IDENT -&gt; String
6004     * |   |--IDENT -&gt; hello
6005     * |   `--ASSIGN -&gt; =
6006     * |       `--EXPR -&gt; EXPR
6007     * |           `--TEXT_BLOCK_LITERAL_BEGIN -&gt; """
6008     * |               |--TEXT_BLOCK_CONTENT -&gt; \n                Hello, world!\n
6009     * |               `--TEXT_BLOCK_LITERAL_END -&gt; """
6010     * `--SEMI -&gt; ;
6011     * </pre>
6012     *
6013     * @since 8.36
6014     */
6015    public static final int TEXT_BLOCK_LITERAL_END =
6016            JavaLanguageLexer.TEXT_BLOCK_LITERAL_END;
6017
6018    /**
6019     * The {@code yield} keyword.  This element appears
6020     * as part of a yield statement.
6021     *
6022     * <p>For example:</p>
6023     * <pre>
6024     * int yield = 0; // not a keyword here
6025     * return switch (mode) {
6026     *    case "a", "b":
6027     *        yield 1;
6028     *    default:
6029     *        yield - 1;
6030     * };
6031     * </pre>
6032     *
6033     * <p>parses as:</p>
6034     * <pre>
6035     * |--VARIABLE_DEF -&gt; VARIABLE_DEF
6036     * |   |--MODIFIERS -&gt; MODIFIERS
6037     * |   |--TYPE -&gt; TYPE
6038     * |   |   `--LITERAL_INT -&gt; int
6039     * |   |--IDENT -&gt; yield
6040     * |   `--ASSIGN -&gt; =
6041     * |       `--EXPR -&gt; EXPR
6042     * |           `--NUM_INT -&gt; 0
6043     * |--SEMI -&gt; ;
6044     * |--LITERAL_RETURN -&gt; return
6045     * |   |--EXPR -&gt; EXPR
6046     * |   |   `--LITERAL_SWITCH -&gt; switch
6047     * |   |       |--LPAREN -&gt; (
6048     * |   |       |--EXPR -&gt; EXPR
6049     * |   |       |   `--IDENT -&gt; mode
6050     * |   |       |--RPAREN -&gt; )
6051     * |   |       |--LCURLY -&gt; {
6052     * |   |       |--CASE_GROUP -&gt; CASE_GROUP
6053     * |   |       |   |--LITERAL_CASE -&gt; case
6054     * |   |       |   |   |--EXPR -&gt; EXPR
6055     * |   |       |   |   |   `--STRING_LITERAL -&gt; "a"
6056     * |   |       |   |   |--COMMA -&gt; ,
6057     * |   |       |   |   |--EXPR -&gt; EXPR
6058     * |   |       |   |   |   `--STRING_LITERAL -&gt; "b"
6059     * |   |       |   |   `--COLON -&gt; :
6060     * |   |       |   `--SLIST -&gt; SLIST
6061     * |   |       |       `--LITERAL_YIELD -&gt; yield
6062     * |   |       |           |--EXPR -&gt; EXPR
6063     * |   |       |           |   `--NUM_INT -&gt; 1
6064     * |   |       |           `--SEMI -&gt; ;
6065     * |   |       |--CASE_GROUP -&gt; CASE_GROUP
6066     * |   |       |   |--LITERAL_DEFAULT -&gt; default
6067     * |   |       |   |   `--COLON -&gt; :
6068     * |   |       |   `--SLIST -&gt; SLIST
6069     * |   |       |       `--LITERAL_YIELD -&gt; yield
6070     * |   |       |           |--EXPR -&gt; EXPR
6071     * |   |       |           |   `--UNARY_MINUS -&gt; -
6072     * |   |       |           |       `--NUM_INT -&gt; 1
6073     * |   |       |           `--SEMI -&gt; ;
6074     * |   |       `--RCURLY -&gt; }
6075     * |   `--SEMI -&gt; ;
6076     * </pre>
6077     *
6078     *
6079     * @see #LITERAL_SWITCH
6080     * @see #CASE_GROUP
6081     * @see #SLIST
6082     * @see #SWITCH_RULE
6083     *
6084     * @see <a href="https://docs.oracle.com/javase/specs/jls/se13/preview/switch-expressions.html">
6085     *     Java Language Specification, &sect;14.21</a>
6086     *
6087     * @since 8.36
6088     */
6089    public static final int LITERAL_YIELD =
6090            JavaLanguageLexer.LITERAL_YIELD;
6091
6092    /**
6093     * Switch Expressions.
6094     *
6095     * <p>For example:</p>
6096     * <pre>
6097     * return switch (day) {
6098     *     case SAT, SUN -&gt; "Weekend";
6099     *     default -&gt; "Working day";
6100     * };
6101     * </pre>
6102     *
6103     * <p>parses as:</p>
6104     * <pre>
6105     * LITERAL_RETURN -&gt; return
6106     *  |--EXPR -&gt; EXPR
6107     *  |   `--LITERAL_SWITCH -&gt; switch
6108     *  |       |--LPAREN -&gt; (
6109     *  |       |--EXPR -&gt; EXPR
6110     *  |       |   `--IDENT -&gt; day
6111     *  |       |--RPAREN -&gt; )
6112     *  |       |--LCURLY -&gt; {
6113     *  |       |--SWITCH_RULE -&gt; SWITCH_RULE
6114     *  |       |   |--LITERAL_CASE -&gt; case
6115     *  |       |   |   |--EXPR -&gt; EXPR
6116     *  |       |   |   |   `--IDENT -&gt; SAT
6117     *  |       |   |   |--COMMA -&gt; ,
6118     *  |       |   |   `--EXPR -&gt; EXPR
6119     *  |       |   |       `--IDENT -&gt; SUN
6120     *  |       |   |--LAMBDA -&gt; -&gt;
6121     *  |       |   |--EXPR -&gt; EXPR
6122     *  |       |   |   `--STRING_LITERAL -&gt; "Weekend"
6123     *  |       |   `--SEMI -&gt; ;
6124     *  |       |--SWITCH_RULE -&gt; SWITCH_RULE
6125     *  |       |   |--LITERAL_DEFAULT -&gt; default
6126     *  |       |   |--LAMBDA -&gt; -&gt;
6127     *  |       |   |--EXPR -&gt; EXPR
6128     *  |       |   |   `--STRING_LITERAL -&gt; "Working day"
6129     *  |       |   `--SEMI -&gt; ;
6130     *  |       `--RCURLY -&gt; }
6131     *  `--SEMI -&gt; ;
6132     * </pre>
6133     *
6134     * @see #LITERAL_CASE
6135     * @see #LITERAL_DEFAULT
6136     * @see #LITERAL_SWITCH
6137     * @see #LITERAL_YIELD
6138     *
6139     * @see <a href="https://docs.oracle.com/javase/specs/jls/se13/preview/switch-expressions.html">
6140     *     Java Language Specification, &sect;14.21</a>
6141     *
6142     * @since 8.36
6143     */
6144    public static final int SWITCH_RULE =
6145            JavaLanguageLexer.SWITCH_RULE;
6146
6147    /**
6148     * The {@code non-sealed} keyword.  This element appears
6149     * as part of a class or interface declaration.
6150     *
6151     * <p>For example:</p>
6152     * <pre>
6153     * non-sealed class Square extends Rectangle { }
6154     * </pre>
6155     *
6156     * <p>parses as:</p>
6157     * <pre>
6158     * CLASS_DEF -&gt; CLASS_DEF
6159     * |--MODIFIERS -&gt; MODIFIERS
6160     * |   `--LITERAL_NON_SEALED -&gt; non-sealed
6161     * |--LITERAL_CLASS -&gt; class
6162     * |--IDENT -&gt; Square
6163     * |--EXTENDS_CLAUSE -&gt; extends
6164     * |   `--IDENT -&gt; Rectangle
6165     * `--OBJBLOCK -&gt; OBJBLOCK
6166     *     |--LCURLY -&gt; {
6167     *     `--RCURLY -&gt; }
6168     * </pre>
6169     *
6170     * @see <a href="https://docs.oracle.com/en/java/javase/15/docs/specs/sealed-classes-jls.html">
6171     *     Java Language Specification, &sect;8.1.1.2</a>
6172     * @see #MODIFIERS
6173     *
6174     * @since 8.42
6175     */
6176    public static final int LITERAL_NON_SEALED =
6177        JavaLanguageLexer.LITERAL_NON_SEALED;
6178
6179    /**
6180     * The {@code sealed} restricted identifier.  This element appears
6181     * as part of a class or interface declaration.
6182     *
6183     * <p>For example:</p>
6184     * <pre>
6185     * public sealed class Shape permits Circle, Square, Rectangle { }
6186     * </pre>
6187     *
6188     * <p>parses as:</p>
6189     * <pre>
6190     * CLASS_DEF -&gt; CLASS_DEF
6191     * |--MODIFIERS -&gt; MODIFIERS
6192     * |   |--LITERAL_PUBLIC -&gt; public
6193     * |   `--LITERAL_SEALED -&gt; sealed
6194     * |--LITERAL_CLASS -&gt; class
6195     * |--IDENT -&gt; Shape
6196     * |--PERMITS_CLAUSE -&gt; permits
6197     * |   |--IDENT -&gt; Circle
6198     * |   |--COMMA -&gt; ,
6199     * |   |--IDENT -&gt; Square
6200     * |   |--COMMA -&gt; ,
6201     * |   `--IDENT -&gt; Rectangle
6202     * `--OBJBLOCK -&gt; OBJBLOCK
6203     *     |--LCURLY -&gt; {
6204     *     `--RCURLY -&gt; }
6205     * </pre>
6206     *
6207     * @see <a href="https://docs.oracle.com/en/java/javase/15/docs/specs/sealed-classes-jls.html">
6208     *     Java Language Specification, &sect;8.1.1.2</a>
6209     * @see #MODIFIERS
6210     *
6211     * @since 8.42
6212     */
6213    public static final int LITERAL_SEALED =
6214        JavaLanguageLexer.LITERAL_SEALED;
6215
6216    /**
6217     * The {@code permits} restricted identifier.  This element appears
6218     * as part of a class or interface declaration.
6219     *
6220     * <p>For example:</p>
6221     * <pre>
6222     * public sealed class Shape permits Circle, Square, Rectangle { }
6223     * </pre>
6224     *
6225     * <p>parses as:</p>
6226     * <pre>
6227     * CLASS_DEF -&gt; CLASS_DEF
6228     * |--MODIFIERS -&gt; MODIFIERS
6229     * |   |--LITERAL_PUBLIC -&gt; public
6230     * |   `--LITERAL_SEALED -&gt; sealed
6231     * |--LITERAL_CLASS -&gt; class
6232     * |--IDENT -&gt; Shape
6233     * |--PERMITS_CLAUSE -&gt; permits
6234     * |   |--IDENT -&gt; Circle
6235     * |   |--COMMA -&gt; ,
6236     * |   |--IDENT -&gt; Square
6237     * |   |--COMMA -&gt; ,
6238     * |   `--IDENT -&gt; Rectangle
6239     * `--OBJBLOCK -&gt; OBJBLOCK
6240     *     |--LCURLY -&gt; {
6241     *     `--RCURLY -&gt; }
6242     * </pre>
6243     *
6244     * @see <a href="https://docs.oracle.com/en/java/javase/15/docs/specs/sealed-classes-jls.html">
6245     *     Java Language Specification, &sect;9.1.4</a>
6246     * @see #MODIFIERS
6247     *
6248     * @since 8.42
6249     */
6250    public static final int LITERAL_PERMITS =
6251        JavaLanguageLexer.LITERAL_PERMITS;
6252
6253    /**
6254     * A permits clause.  A permits clause's children are a comma separated list of one or
6255     * more identifiers.
6256     *
6257     * <p>For example:</p>
6258     * <pre>
6259     * public sealed class Shape permits Circle, Square, Rectangle { }
6260     * </pre>
6261     *
6262     * <p>parses as:</p>
6263     * <pre>
6264     * CLASS_DEF -&gt; CLASS_DEF
6265     * |--MODIFIERS -&gt; MODIFIERS
6266     * |   |--LITERAL_PUBLIC -&gt; public
6267     * |   `--LITERAL_SEALED -&gt; sealed
6268     * |--LITERAL_CLASS -&gt; class
6269     * |--IDENT -&gt; Shape
6270     * |--PERMITS_CLAUSE -&gt; permits
6271     * |   |--IDENT -&gt; Circle
6272     * |   |--COMMA -&gt; ,
6273     * |   |--IDENT -&gt; Square
6274     * |   |--COMMA -&gt; ,
6275     * |   `--IDENT -&gt; Rectangle
6276     * `--OBJBLOCK -&gt; OBJBLOCK
6277     *     |--LCURLY -&gt; {
6278     *     `--RCURLY -&gt; }
6279     * </pre>
6280     *
6281     * @see <a href="https://docs.oracle.com/en/java/javase/15/docs/specs/sealed-classes-jls.html">
6282     *     Java Language Specification, &sect;9.1.4</a>
6283     * @see #MODIFIERS
6284     * @see #CLASS_DEF
6285     * @see #INTERFACE_DEF
6286     * @see #COMMA
6287     * @see #IDENT
6288     *
6289     * @since 8.42
6290     */
6291    public static final int PERMITS_CLAUSE =
6292        JavaLanguageLexer.PERMITS_CLAUSE;
6293
6294    /**
6295     * A pattern definition, excluding simple type pattern (pattern variable)
6296     * definition such as {@code if (o instanceof Integer i){}}. Pattern definitions
6297     * appear as operands of statements and expressions.
6298     *
6299     * <p>For example:</p>
6300     * <pre>
6301     * switch(o) {
6302     *     case String s when s.length() &gt; 4: // guarded pattern, `PATTERN_DEF`
6303     *         break;
6304     *     case String s: // type pattern, no `PATTERN_DEF`
6305     *         break;
6306     * }
6307     * </pre>
6308     *
6309     * <p>parses as:</p>
6310     * <pre>
6311     * LITERAL_SWITCH -&gt; switch
6312     * |   |--LPAREN -&gt; (
6313     * |   |--EXPR -&gt; EXPR
6314     * |   |   `--IDENT -&gt; o
6315     * |   |--RPAREN -&gt; )
6316     * |   |--LCURLY -&gt; {
6317     * |   |--CASE_GROUP -&gt; CASE_GROUP
6318     * |   |   |--LITERAL_CASE -&gt; case
6319     * |   |   |   |--PATTERN_DEF -&gt; PATTERN_DEF
6320     * |   |   |   |   `--LITERAL_WHEN -&gt; when
6321     * |   |   |   |       |--PATTERN_VARIABLE_DEF -&gt; PATTERN_VARIABLE_DEF
6322     * |   |   |   |       |   |--MODIFIERS -&gt; MODIFIERS
6323     * |   |   |   |       |   |--TYPE -&gt; TYPE
6324     * |   |   |   |       |   |   `--IDENT -&gt; String
6325     * |   |   |   |       |   `--IDENT -&gt; s
6326     * |   |   |   |       `--GT -&gt; &gt;
6327     * |   |   |   |           |--METHOD_CALL -&gt; (
6328     * |   |   |   |           |   |--DOT -&gt; .
6329     * |   |   |   |           |   |   |--IDENT -&gt; s
6330     * |   |   |   |           |   |   `--IDENT -&gt; length
6331     * |   |   |   |           |   |--ELIST -&gt; ELIST
6332     * |   |   |   |           |   `--RPAREN -&gt; )
6333     * |   |   |   |           `--NUM_INT -&gt; 4
6334     * |   |   |   `--COLON -&gt; :
6335     * |   |   `--SLIST -&gt; SLIST
6336     * |   |       `--LITERAL_BREAK -&gt; break
6337     * |   |           `--SEMI -&gt; ;
6338     * |   |--CASE_GROUP -&gt; CASE_GROUP
6339     * |   |   |--LITERAL_CASE -&gt; case
6340     * |   |   |   |--PATTERN_VARIABLE_DEF -&gt; PATTERN_VARIABLE_DEF
6341     * |   |   |   |   |--MODIFIERS -&gt; MODIFIERS
6342     * |   |   |   |   |--TYPE -&gt; TYPE
6343     * |   |   |   |   |   `--IDENT -&gt; String
6344     * |   |   |   |   `--IDENT -&gt; s
6345     * |   |   |   `--COLON -&gt; :
6346     * |   |   `--SLIST -&gt; SLIST
6347     * |   |       `--LITERAL_BREAK -&gt; break
6348     * |   |           `--SEMI -&gt; ;
6349     * |   `--RCURLY -&gt; }
6350     * `--RCURLY -&gt; }
6351     * </pre>
6352     *
6353     * @see <a href="https://docs.oracle.com/javase/specs/jls/se17/html/jls-14.html#jls-14.30">
6354     *     Java Language Specification, &sect;14.30</a>
6355     * @see #LITERAL_SWITCH
6356     * @see #PATTERN_VARIABLE_DEF
6357     * @see #LITERAL_INSTANCEOF
6358     *
6359     * @since 9.3
6360     */
6361    public static final int PATTERN_DEF =
6362        JavaLanguageLexer.PATTERN_DEF;
6363
6364    /**
6365     * A {@code when} clause. Appears as part of a switch label in a guarded pattern definition.
6366     *
6367     * <p>For example:</p>
6368     * <pre>
6369     * return switch (o) {
6370     *     case Integer i when i &gt;= 0 -&gt; i;
6371     *     default -&gt; 2;
6372     * };
6373     * </pre>
6374     *
6375     * <p>parses as:</p>
6376     * <pre>
6377     * LITERAL_RETURN -&gt; return
6378     *  `--EXPR -&gt; EXPR
6379     *      `--LITERAL_SWITCH -&gt; switch
6380     *          |--LPAREN -&gt; (
6381     *          |--EXPR -&gt; EXPR
6382     *          |   `--IDENT -&gt; o
6383     *          |--RPAREN -&gt; )
6384     *          |--LCURLY -&gt; {
6385     *          |--SWITCH_RULE -&gt; SWITCH_RULE
6386     *          |   |--LITERAL_CASE -&gt; case
6387     *          |   |   `--PATTERN_DEF -&gt; PATTERN_DEF
6388     *          |   |       `--LITERAL_WHEN -&gt; when
6389     *          |   |           |--PATTERN_VARIABLE_DEF -&gt; PATTERN_VARIABLE_DEF
6390     *          |   |           |   |--MODIFIERS -&gt; MODIFIERS
6391     *          |   |           |   |--TYPE -&gt; TYPE
6392     *          |   |           |   |   `--IDENT -&gt; Integer
6393     *          |   |           |   `--IDENT -&gt; i
6394     *          |   |           `--GE -&gt; &gt;=
6395     *          |   |               |--IDENT -&gt; i
6396     *          |   |               `--NUM_INT -&gt; 0
6397     *          |   |--LAMBDA -&gt; -&gt;
6398     *          |   |--EXPR -&gt; EXPR
6399     *          |   |   `--IDENT -&gt; i
6400     *          |   `--SEMI -&gt; ;
6401     *          |--SWITCH_RULE -&gt; SWITCH_RULE
6402     *          |   |--LITERAL_DEFAULT -&gt; default
6403     *          |   |--LAMBDA -&gt; -&gt;
6404     *          |   |--EXPR -&gt; EXPR
6405     *          |   |   `--NUM_INT -&gt; 2
6406     *          |   `--SEMI -&gt; ;
6407     *          `--RCURLY -&gt; }
6408     * </pre>
6409     *
6410     * @see <a href="https://docs.oracle.com/javase/specs/jls/se17/html/jls-14.html#jls-14.30">
6411     *     Java Language Specification, &sect;14.30</a>
6412     * @see #LITERAL_SWITCH
6413     * @see #PATTERN_VARIABLE_DEF
6414     * @see #LITERAL_INSTANCEOF
6415     * @see #SWITCH_RULE
6416     *
6417     * @since 10.7.0
6418     */
6419    public static final int LITERAL_WHEN =
6420        JavaLanguageLexer.LITERAL_WHEN;
6421
6422    /**
6423     * A {@code record} pattern definition. A record pattern consists of a type,
6424     * a (possibly empty) record component pattern list which is used to match against
6425     * the corresponding record components, and an optional identifier. Appears as part of
6426     * an {@code instanceof} expression or a {@code case} label in a switch.
6427     *
6428     * <p>For example:</p>
6429     * <pre>
6430     * record R(Object o){}
6431     * if (o instanceof R(String s) myRecord) {}
6432     * switch (o) {
6433     *     case R(String s) myRecord -&gt; {}
6434     * }
6435     * </pre>
6436     *
6437     * <p>parses as:</p>
6438     * <pre>
6439     * |--RECORD_DEF -&gt; RECORD_DEF
6440     * |   |--MODIFIERS -&gt; MODIFIERS
6441     * |   |--LITERAL_RECORD -&gt; record
6442     * |   |--IDENT -&gt; R
6443     * |   |--LPAREN -&gt; (
6444     * |   |--RECORD_COMPONENTS -&gt; RECORD_COMPONENTS
6445     * |   |   `--RECORD_COMPONENT_DEF -&gt; RECORD_COMPONENT_DEF
6446     * |   |       |--ANNOTATIONS -&gt; ANNOTATIONS
6447     * |   |       |--TYPE -&gt; TYPE
6448     * |   |       |   `--IDENT -&gt; Object
6449     * |   |       `--IDENT -&gt; o
6450     * |   |--RPAREN -&gt; )
6451     * |   `--OBJBLOCK -&gt; OBJBLOCK
6452     * |       |--LCURLY -&gt; {
6453     * |       `--RCURLY -&gt; }
6454     * |--LITERAL_IF -&gt; if
6455     * |   |--LPAREN -&gt; (
6456     * |   |--EXPR -&gt; EXPR
6457     * |   |   `--LITERAL_INSTANCEOF -&gt; instanceof
6458     * |   |       |--IDENT -&gt; o
6459     * |   |       `--RECORD_PATTERN_DEF -&gt; RECORD_PATTERN_DEF
6460     * |   |           |--MODIFIERS -&gt; MODIFIERS
6461     * |   |           |--TYPE -&gt; TYPE
6462     * |   |           |   `--IDENT -&gt; R
6463     * |   |           |--LPAREN -&gt; (
6464     * |   |           |--RECORD_PATTERN_COMPONENTS -&gt; RECORD_PATTERN_COMPONENTS
6465     * |   |           |   `--PATTERN_VARIABLE_DEF -&gt; PATTERN_VARIABLE_DEF
6466     * |   |           |       |--MODIFIERS -&gt; MODIFIERS
6467     * |   |           |       |--TYPE -&gt; TYPE
6468     * |   |           |       |   `--IDENT -&gt; String
6469     * |   |           |       `--IDENT -&gt; s
6470     * |   |           |--RPAREN -&gt; )
6471     * |   |           `--IDENT -&gt; myRecord
6472     * |   |--RPAREN -&gt; )
6473     * |   `--SLIST -&gt; {
6474     * |       `--RCURLY -&gt; }
6475     * |--LITERAL_SWITCH -&gt; switch
6476     * |   |--LPAREN -&gt; (
6477     * |   |--EXPR -&gt; EXPR
6478     * |   |   `--IDENT -&gt; o
6479     * |   |--RPAREN -&gt; )
6480     * |   |--LCURLY -&gt; {
6481     * |   |--SWITCH_RULE -&gt; SWITCH_RULE
6482     * |   |   |--LITERAL_CASE -&gt; case
6483     * |   |   |   `--RECORD_PATTERN_DEF -&gt; RECORD_PATTERN_DEF
6484     * |   |   |       |--MODIFIERS -&gt; MODIFIERS
6485     * |   |   |       |--TYPE -&gt; TYPE
6486     * |   |   |       |   `--IDENT -&gt; R
6487     * |   |   |       |--LPAREN -&gt; (
6488     * |   |   |       |--RECORD_PATTERN_COMPONENTS -&gt; RECORD_PATTERN_COMPONENTS
6489     * |   |   |       |   `--PATTERN_VARIABLE_DEF -&gt; PATTERN_VARIABLE_DEF
6490     * |   |   |       |       |--MODIFIERS -&gt; MODIFIERS
6491     * |   |   |       |       |--TYPE -&gt; TYPE
6492     * |   |   |       |       |   `--IDENT -&gt; String
6493     * |   |   |       |       `--IDENT -&gt; s
6494     * |   |   |       |--RPAREN -&gt; )
6495     * |   |   |       `--IDENT -&gt; myRecord
6496     * |   |   |--LAMBDA -&gt; -&gt;
6497     * |   |   `--SLIST -&gt; {
6498     * |   |       `--RCURLY -&gt; }
6499     * |   `--RCURLY -&gt; }
6500     * `--RCURLY -&gt; }
6501     * </pre>
6502     *
6503     * @see <a href="https://openjdk.org/jeps/405">JEP 405: Record Patterns</a>
6504     * @see #LITERAL_WHEN
6505     * @see #PATTERN_VARIABLE_DEF
6506     * @see #LITERAL_INSTANCEOF
6507     * @see #SWITCH_RULE
6508     *
6509     * @since 10.12.0
6510     */
6511    public static final int RECORD_PATTERN_DEF =
6512        JavaLanguageLexer.RECORD_PATTERN_DEF;
6513
6514    /**
6515     * A (possibly empty) record component pattern list which is used to match against
6516     * the corresponding record components. Appears as part of a record pattern definition.
6517     *
6518     * <p>For example:</p>
6519     * <pre>
6520     * record R(Object o){}
6521     * if (o instanceof R(String myComponent)) {}
6522     * switch (o) {
6523     *     case R(String myComponent) when "component".equalsIgnoreCase(myComponent) -&gt; {}
6524     * }
6525     * </pre>
6526     *
6527     * <p>parses as:</p>
6528     * <pre>
6529     * |--RECORD_DEF -&gt; RECORD_DEF
6530     * |   |--MODIFIERS -&gt; MODIFIERS
6531     * |   |--LITERAL_RECORD -&gt; record
6532     * |   |--IDENT -&gt; R
6533     * |   |--LPAREN -&gt; (
6534     * |   |--RECORD_COMPONENTS -&gt; RECORD_COMPONENTS
6535     * |   |   `--RECORD_COMPONENT_DEF -&gt; RECORD_COMPONENT_DEF
6536     * |   |       |--ANNOTATIONS -&gt; ANNOTATIONS
6537     * |   |       |--TYPE -&gt; TYPE
6538     * |   |       |   `--IDENT -&gt; Object
6539     * |   |       `--IDENT -&gt; o
6540     * |   |--RPAREN -&gt; )
6541     * |   `--OBJBLOCK -&gt; OBJBLOCK
6542     * |       |--LCURLY -&gt; {
6543     * |       `--RCURLY -&gt; }
6544     * |--LITERAL_IF -&gt; if
6545     * |   |--LPAREN -&gt; (
6546     * |   |--EXPR -&gt; EXPR
6547     * |   |   `--LITERAL_INSTANCEOF -&gt; instanceof
6548     * |   |       |--IDENT -&gt; o
6549     * |   |       `--RECORD_PATTERN_DEF -&gt; RECORD_PATTERN_DEF
6550     * |   |           |--MODIFIERS -&gt; MODIFIERS
6551     * |   |           |--TYPE -&gt; TYPE
6552     * |   |           |   `--IDENT -&gt; R
6553     * |   |           |--LPAREN -&gt; (
6554     * |   |           |--RECORD_PATTERN_COMPONENTS -&gt; RECORD_PATTERN_COMPONENTS
6555     * |   |           |   `--PATTERN_VARIABLE_DEF -&gt; PATTERN_VARIABLE_DEF
6556     * |   |           |       |--MODIFIERS -&gt; MODIFIERS
6557     * |   |           |       |--TYPE -&gt; TYPE
6558     * |   |           |       |   `--IDENT -&gt; String
6559     * |   |           |       `--IDENT -&gt; myComponent
6560     * |   |           `--RPAREN -&gt; )
6561     * |   |--RPAREN -&gt; )
6562     * |   `--SLIST -&gt; {
6563     * |       `--RCURLY -&gt; }
6564     * |--LITERAL_SWITCH -&gt; switch
6565     * |   |--LPAREN -&gt; (
6566     * |   |--EXPR -&gt; EXPR
6567     * |   |   `--IDENT -&gt; o
6568     * |   |--RPAREN -&gt; )
6569     * |   |--LCURLY -&gt; {
6570     * |   |--SWITCH_RULE -&gt; SWITCH_RULE
6571     * |   |   |--LITERAL_CASE -&gt; case
6572     * |   |   |   `--PATTERN_DEF -&gt; PATTERN_DEF
6573     * |   |   |       `--LITERAL_WHEN -&gt; when
6574     * |   |   |           |--RECORD_PATTERN_DEF -&gt; RECORD_PATTERN_DEF
6575     * |   |   |           |   |--MODIFIERS -&gt; MODIFIERS
6576     * |   |   |           |   |--TYPE -&gt; TYPE
6577     * |   |   |           |   |   `--IDENT -&gt; R
6578     * |   |   |           |   |--LPAREN -&gt; (
6579     * |   |   |           |   |--RECORD_PATTERN_COMPONENTS -&gt; RECORD_PATTERN_COMPONENTS
6580     * |   |   |           |   |   `--PATTERN_VARIABLE_DEF -&gt; PATTERN_VARIABLE_DEF
6581     * |   |   |           |   |       |--MODIFIERS -&gt; MODIFIERS
6582     * |   |   |           |   |       |--TYPE -&gt; TYPE
6583     * |   |   |           |   |       |   `--IDENT -&gt; String
6584     * |   |   |           |   |       `--IDENT -&gt; myComponent
6585     * |   |   |           |   `--RPAREN -&gt; )
6586     * |   |   |           `--METHOD_CALL -&gt; (
6587     * |   |   |               |--DOT -&gt; .
6588     * |   |   |               |   |--STRING_LITERAL -&gt; "component"
6589     * |   |   |               |   `--IDENT -&gt; equalsIgnoreCase
6590     * |   |   |               |--ELIST -&gt; ELIST
6591     * |   |   |               |   `--EXPR -&gt; EXPR
6592     * |   |   |               |       `--IDENT -&gt; myComponent
6593     * |   |   |               `--RPAREN -&gt; )
6594     * |   |   |--LAMBDA -&gt; -&gt;
6595     * |   |   `--SLIST -&gt; {
6596     * |   |       `--RCURLY -&gt; }
6597     * |   `--RCURLY -&gt; }
6598     * `--RCURLY -&gt; }
6599     * </pre>
6600     *
6601     * @see <a href="https://openjdk.org/jeps/405">JEP 405: Record Patterns</a>
6602     * @see #LITERAL_WHEN
6603     * @see #PATTERN_VARIABLE_DEF
6604     * @see #LITERAL_INSTANCEOF
6605     * @see #SWITCH_RULE
6606     *
6607     * @since 10.12.0
6608     */
6609    public static final int RECORD_PATTERN_COMPONENTS =
6610            JavaLanguageLexer.RECORD_PATTERN_COMPONENTS;
6611
6612    /**
6613     * An unnamed pattern variable definition. Appears as part of a pattern definition.
6614     *
6615     * <p>For example:</p>
6616     * <pre>
6617     *    if (r instanceof R(_)) {}
6618     * </pre>
6619     *
6620     * <p>parses as:</p>
6621     * <pre>
6622     * LITERAL_IF -&gt; if
6623     *  |--LPAREN -&gt; (
6624     *  |--EXPR -&gt; EXPR
6625     *  |   `--LITERAL_INSTANCEOF -&gt; instanceof
6626     *  |       |--IDENT -&gt; r
6627     *  |       `--RECORD_PATTERN_DEF -&gt; RECORD_PATTERN_DEF
6628     *  |           |--MODIFIERS -&gt; MODIFIERS
6629     *  |           |--TYPE -&gt; TYPE
6630     *  |           |   `--IDENT -&gt; R
6631     *  |           |--LPAREN -&gt; (
6632     *  |           |--RECORD_PATTERN_COMPONENTS -&gt; RECORD_PATTERN_COMPONENTS
6633     *  |           |   `--UNNAMED_PATTERN_DEF -&gt; _
6634     *  |           `--RPAREN -&gt; )
6635     *  |--RPAREN -&gt; )
6636     *  `--SLIST -&gt; {
6637     *      `--RCURLY -&gt; }
6638     * </pre>
6639     *
6640     * @see #RECORD_PATTERN_COMPONENTS
6641     * @see #RECORD_PATTERN_DEF
6642     * @see #LITERAL_SWITCH
6643     * @see #LITERAL_INSTANCEOF
6644     * @see #SWITCH_RULE
6645     * @see #LITERAL_WHEN
6646     * @see #PATTERN_VARIABLE_DEF
6647     * @see #PATTERN_DEF
6648     *
6649     * @since 10.14.0
6650     */
6651    public static final int UNNAMED_PATTERN_DEF =
6652            JavaLanguageLexer.UNNAMED_PATTERN_DEF;
6653
6654    /**
6655     * A {@code module} keyword.
6656     *
6657     * <p>For example:</p>
6658     * <pre>
6659     * import module java.base;
6660     * </pre>
6661     *
6662     * <p>parses as:</p>
6663     * <pre>
6664     * MODULE_IMPORT -> import
6665     *  |--LITERAL_MODULE -> module
6666     *  |--DOT -> .
6667     *  |   |--IDENT -> java
6668     *  |   `--IDENT -> base
6669     *  `--SEMI -> ;
6670     * </pre>
6671     *
6672     * @see <a href="https://docs.oracle.com/javase/specs/jls/se25/html/jls-7.html#jls-7.5.5">
6673     *     Java Language Specification, &sect;7.5.5</a>
6674     * @see <a href="https://docs.oracle.com/javase/specs/jls/se25/html/jls-7.html#jls-7.7">
6675     *     Java Language Specification, &sect;7.7</a>
6676     * @see #IMPORT
6677     * @see #MODULE_IMPORT
6678     *
6679     * @since 12.2.0
6680     */
6681    public static final int LITERAL_MODULE = JavaLanguageLexer.LITERAL_MODULE;
6682
6683    /**
6684     * A module import declaration - {@code import module}.
6685     *
6686     * <p>For example:</p>
6687     * <pre>
6688     * import module java.base;
6689     * </pre>
6690     *
6691     * <p>parses as:</p>
6692     * <pre>
6693     * MODULE_IMPORT -> import
6694     *  |--LITERAL_MODULE -> module
6695     *  |--DOT -> .
6696     *  |   |--IDENT -> java
6697     *  |   `--IDENT -> base
6698     *  `--SEMI -> ;
6699     * </pre>
6700     *
6701     * @see <a href="https://docs.oracle.com/javase/specs/jls/se25/html/jls-7.html#jls-7.5.5">
6702     *     Java Language Specification, &sect;7.5.5</a>
6703     * @see #IMPORT
6704     * @see #LITERAL_MODULE
6705     *
6706     * @since 12.2.0
6707     */
6708    public static final int MODULE_IMPORT = JavaLanguageLexer.MODULE_IMPORT;
6709
6710    /** Prevent instantiation. */
6711    private TokenTypes() {
6712    }
6713
6714}