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