• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1
2/*
3 [The "BSD licence"]
4 Copyright (c) 2007-2008 Terence Parr
5 All rights reserved.
6
7 Redistribution and use in source and binary forms, with or without
8 modification, are permitted provided that the following conditions
9 are met:
10 1. Redistributions of source code must retain the above copyright
11    notice, this list of conditions and the following disclaimer.
12 2. Redistributions in binary form must reproduce the above copyright
13    notice, this list of conditions and the following disclaimer in the
14    documentation and/or other materials provided with the distribution.
15 3. The name of the author may not be used to endorse or promote products
16    derived from this software without specific prior written permission.
17
18 THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21 IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28*/
29
30/*
31 * This file is modified by Yang Jiang (yang.jiang.z@gmail.com), taken from the original
32 * java grammar in www.antlr.org, with the goal to provide a standard ANTLR grammar
33 * for java, as well as an implementation to construct the same AST trees as javac does.
34 *
35 * The major changes of this version as compared to the original version include:
36 * 1) Top level rules are changed to include all of their sub-components.
37 *    For example, the rule
38 *
39 *      classOrInterfaceDeclaration
40 *          :   classOrInterfaceModifiers (classDeclaration | interfaceDeclaration)
41 *      ;
42 *
43 *    is changed to
44 *
45 *      classOrInterfaceDeclaration
46 *          :   classDeclaration | interfaceDeclaration
47 *      ;
48 *
49 *    with classOrInterfaceModifiers been moved inside classDeclaration and
50 *    interfaceDeclaration.
51 *
52 * 2) The original version is not quite clear on certain rules like memberDecl,
53 *    where it mixed the styles of listing of top level rules and listing of sub rules.
54 *
55 *    memberDecl
56 *      :   genericMethodOrConstructorDecl
57 *      |   memberDeclaration
58 *      |   'void' Identifier voidMethodDeclaratorRest
59 *      |   Identifier constructorDeclaratorRest
60 *      |   interfaceDeclaration
61 *      |   classDeclaration
62 *      ;
63 *
64 *    This is changed to a
65 *
66 *    memberDecl
67 *      :   fieldDeclaration
68 *      |   methodDeclaration
69 *      |   classDeclaration
70 *      |   interfaceDeclaration
71 *      ;
72 *    by folding similar rules into single rule.
73 *
74 * 3) Some syntactical predicates are added for efficiency, although this is not necessary
75 *    for correctness.
76 *
77 * 4) Lexer part is rewritten completely to construct tokens needed for the parser.
78 *
79 * 5) This grammar adds more source level support
80 *
81 *
82 * This grammar also adds bug fixes.
83 *
84 * 1) Adding typeArguments to superSuffix to alHexSignificandlow input like
85 *      super.<TYPE>method()
86 *
87 * 2) Adding typeArguments to innerCreator to allow input like
88 *      new Type1<String, Integer>().new Type2<String>()
89 *
90 * 3) conditionalExpression is changed to
91 *    conditionalExpression
92 *      :   conditionalOrExpression ( '?' expression ':' conditionalExpression )?
93 *      ;
94 *    to accept input like
95 *      true?1:2=3
96 *
97 *    Note: note this is by no means a valid input, by the grammar should be able to parse
98 *    this as
99 *            (true?1:2)=3
100 *    rather than
101 *            true?1:(2=3)
102 *
103 *
104 *  Know problems:
105 *    Won't pass input containing unicode sequence like this
106 *      char c = '\uffff'
107 *      String s = "\uffff";
108 *    Because Antlr does not treat '\uffff' as an valid char. This will be fixed in the next Antlr
109 *    release. [Fixed in Antlr-3.1.1]
110 *
111 *  Things to do:
112 *    More effort to make this grammar faster.
113 *    Error reporting/recovering.
114 *
115 *
116 *  NOTE: If you try to compile this file from command line and Antlr gives an exception
117 *    like error message while compiling, add option
118 *    -Xconversiontimeout 100000
119 *    to the command line.
120 *    If it still doesn't work or the compilation process
121 *    takes too long, try to comment out the following two lines:
122 *    |    {isValidSurrogateIdentifierStart((char)input.LT(1), (char)input.LT(2))}?=>('\ud800'..'\udbff') ('\udc00'..'\udfff')
123 *    |    {isValidSurrogateIdentifierPart((char)input.LT(1), (char)input.LT(2))}?=>('\ud800'..'\udbff') ('\udc00'..'\udfff')
124 *
125 *
126 *  Below are comments found in the original version.
127 */
128
129
130/** A Java 1.5 grammar for ANTLR v3 derived from the spec
131 *
132 *  This is a very close representation of the spec; the changes
133 *  are comestic (remove left recursion) and also fixes (the spec
134 *  isn't exactly perfect).  I have run this on the 1.4.2 source
135 *  and some nasty looking enums from 1.5, but have not really
136 *  tested for 1.5 compatibility.
137 *
138 *  I built this with: java -Xmx100M org.antlr.Tool java.g
139 *  and got two errors that are ok (for now):
140 *  java.g:691:9: Decision can match input such as
141 *    "'0'..'9'{'E', 'e'}{'+', '-'}'0'..'9'{'D', 'F', 'd', 'f'}"
142 *    using multiple alternatives: 3, 4
143 *  As a result, alternative(s) 4 were disabled for that input
144 *  java.g:734:35: Decision can match input such as "{'$', 'A'..'Z',
145 *    '_', 'a'..'z', '\u00C0'..'\u00D6', '\u00D8'..'\u00F6',
146 *    '\u00F8'..'\u1FFF', '\u3040'..'\u318F', '\u3300'..'\u337F',
147 *    '\u3400'..'\u3D2D', '\u4E00'..'\u9FFF', '\uF900'..'\uFAFF'}"
148 *    using multiple alternatives: 1, 2
149 *  As a result, alternative(s) 2 were disabled for that input
150 *
151 *  You can turn enum on/off as a keyword :)
152 *
153 *  Version 1.0 -- initial release July 5, 2006 (requires 3.0b2 or higher)
154 *
155 *  Primary author: Terence Parr, July 2006
156 *
157 *  Version 1.0.1 -- corrections by Koen Vanderkimpen & Marko van Dooren,
158 *      October 25, 2006;
159 *      fixed normalInterfaceDeclaration: now uses typeParameters instead
160 *          of typeParameter (according to JLS, 3rd edition)
161 *      fixed castExpression: no longer allows expression next to type
162 *          (according to semantics in JLS, in contrast with syntax in JLS)
163 *
164 *  Version 1.0.2 -- Terence Parr, Nov 27, 2006
165 *      java spec I built this from had some bizarre for-loop control.
166 *          Looked weird and so I looked elsewhere...Yep, it's messed up.
167 *          simplified.
168 *
169 *  Version 1.0.3 -- Chris Hogue, Feb 26, 2007
170 *      Factored out an annotationName rule and used it in the annotation rule.
171 *          Not sure why, but typeName wasn't recognizing references to inner
172 *          annotations (e.g. @InterfaceName.InnerAnnotation())
173 *      Factored out the elementValue section of an annotation reference.  Created
174 *          elementValuePair and elementValuePairs rules, then used them in the
175 *          annotation rule.  Allows it to recognize annotation references with
176 *          multiple, comma separated attributes.
177 *      Updated elementValueArrayInitializer so that it allows multiple elements.
178 *          (It was only allowing 0 or 1 element).
179 *      Updated localVariableDeclaration to allow annotations.  Interestingly the JLS
180 *          doesn't appear to indicate this is legal, but it does work as of at least
181 *          JDK 1.5.0_06.
182 *      Moved the Identifier portion of annotationTypeElementRest to annotationMethodRest.
183 *          Because annotationConstantRest already references variableDeclarator which
184 *          has the Identifier portion in it, the parser would fail on constants in
185 *          annotation definitions because it expected two identifiers.
186 *      Added optional trailing ';' to the alternatives in annotationTypeElementRest.
187 *          Wouldn't handle an inner interface that has a trailing ';'.
188 *      Swapped the expression and type rule reference order in castExpression to
189 *          make it check for genericized casts first.  It was failing to recognize a
190 *          statement like  "Class<Byte> TYPE = (Class<Byte>)...;" because it was seeing
191 *          'Class<Byte' in the cast expression as a less than expression, then failing
192 *          on the '>'.
193 *      Changed createdName to use typeArguments instead of nonWildcardTypeArguments.
194 *
195 *      Changed the 'this' alternative in primary to allow 'identifierSuffix' rather than
196 *          just 'arguments'.  The case it couldn't handle was a call to an explicit
197 *          generic method invocation (e.g. this.<E>doSomething()).  Using identifierSuffix
198 *          may be overly aggressive--perhaps should create a more constrained thisSuffix rule?
199 *
200 *  Version 1.0.4 -- Hiroaki Nakamura, May 3, 2007
201 *
202 *  Fixed formalParameterDecls, localVariableDeclaration, forInit,
203 *  and forVarControl to use variableModifier* not 'final'? (annotation)?
204 *
205 *  Version 1.0.5 -- Terence, June 21, 2007
206 *  --a[i].foo didn't work. Fixed unaryExpression
207 *
208 *  Version 1.0.6 -- John Ridgway, March 17, 2008
209 *      Made "assert" a switchable keyword like "enum".
210 *      Fixed compilationUnit to disallow "annotation importDeclaration ...".
211 *      Changed "Identifier ('.' Identifier)*" to "qualifiedName" in more
212 *          places.
213 *      Changed modifier* and/or variableModifier* to classOrInterfaceModifiers,
214 *          modifiers or variableModifiers, as appropriate.
215 *      Renamed "bound" to "typeBound" to better match language in the JLS.
216 *      Added "memberDeclaration" which rewrites to methodDeclaration or
217 *      fieldDeclaration and pulled type into memberDeclaration.  So we parse
218 *          type and then move on to decide whether we're dealing with a field
219 *          or a method.
220 *      Modified "constructorDeclaration" to use "constructorBody" instead of
221 *          "methodBody".  constructorBody starts with explicitConstructorInvocation,
222 *          then goes on to blockStatement*.  Pulling explicitConstructorInvocation
223 *          out of expressions allowed me to simplify "primary".
224 *      Changed variableDeclarator to simplify it.
225 *      Changed type to use classOrInterfaceType, thus simplifying it; of course
226 *          I then had to add classOrInterfaceType, but it is used in several
227 *          places.
228 *      Fixed annotations, old version allowed "@X(y,z)", which is illegal.
229 *      Added optional comma to end of "elementValueArrayInitializer"; as per JLS.
230 *      Changed annotationTypeElementRest to use normalClassDeclaration and
231 *          normalInterfaceDeclaration rather than classDeclaration and
232 *          interfaceDeclaration, thus getting rid of a couple of grammar ambiguities.
233 *      Split localVariableDeclaration into localVariableDeclarationStatement
234 *          (includes the terminating semi-colon) and localVariableDeclaration.
235 *          This allowed me to use localVariableDeclaration in "forInit" clauses,
236 *           simplifying them.
237 *      Changed switchBlockStatementGroup to use multiple labels.  This adds an
238 *          ambiguity, but if one uses appropriately greedy parsing it yields the
239 *           parse that is closest to the meaning of the switch statement.
240 *      Renamed "forVarControl" to "enhancedForControl" -- JLS language.
241 *      Added semantic predicates to test for shift operations rather than other
242 *          things.  Thus, for instance, the string "< <" will never be treated
243 *          as a left-shift operator.
244 *      In "creator" we rule out "nonWildcardTypeArguments" on arrayCreation,
245 *          which are illegal.
246 *      Moved "nonWildcardTypeArguments into innerCreator.
247 *      Removed 'super' superSuffix from explicitGenericInvocation, since that
248 *          is only used in explicitConstructorInvocation at the beginning of a
249 *           constructorBody.  (This is part of the simplification of expressions
250 *           mentioned earlier.)
251 *      Simplified primary (got rid of those things that are only used in
252 *          explicitConstructorInvocation).
253 *      Lexer -- removed "Exponent?" from FloatingPointLiteral choice 4, since it
254 *          led to an ambiguity.
255 *
256 *      This grammar successfully parses every .java file in the JDK 1.5 source
257 *          tree (excluding those whose file names include '-', which are not
258 *          valid Java compilation units).
259 *
260 *  Known remaining problems:
261 *      "Letter" and "JavaIDDigit" are wrong.  The actual specification of
262 *      "Letter" should be "a character for which the method
263 *      Character.isJavaIdentifierStart(int) returns true."  A "Java
264 *      letter-or-digit is a character for which the method
265 *      Character.isJavaIdentifierPart(int) returns true."
266 */
267
268
269 /*
270    This is a merged file, containing two versions of the Java.g grammar.
271    To extract a version from the file, run the ver.jar with the command provided below.
272
273    Version 1 - tree building version, with all source level support, error recovery etc.
274                This is the version for compiler grammar workspace.
275                This version can be extracted by invoking:
276                java -cp ver.jar Main 1 true true true true true Java.g
277
278    Version 2 - clean version, with no source leve support, no error recovery, no predicts,
279                assumes 1.6 level, works in Antlrworks.
280                This is the version for Alex.
281                This version can be extracted by invoking:
282                java -cp ver.jar Main 2 false false false false false Java.g
283*/
284
285grammar Java;
286
287
288options {
289    backtrack=true;
290    memoize=true;
291}
292
293/********************************************************************************************
294                          Parser section
295*********************************************************************************************/
296
297compilationUnit
298    :   (   (annotations
299            )?
300            packageDeclaration
301        )?
302        (importDeclaration
303        )*
304        (typeDeclaration
305        )*
306    ;
307
308packageDeclaration
309    :   'package' qualifiedName
310        ';'
311    ;
312
313importDeclaration
314    :   'import'
315        ('static'
316        )?
317        IDENTIFIER '.' '*'
318        ';'
319    |   'import'
320        ('static'
321        )?
322        IDENTIFIER
323        ('.' IDENTIFIER
324        )+
325        ('.' '*'
326        )?
327        ';'
328    ;
329
330qualifiedImportName
331    :   IDENTIFIER
332        ('.' IDENTIFIER
333        )*
334    ;
335
336typeDeclaration
337    :   classOrInterfaceDeclaration
338    |   ';'
339    ;
340
341classOrInterfaceDeclaration
342    :    classDeclaration
343    |   interfaceDeclaration
344    ;
345
346
347modifiers
348    :
349    (    annotation
350    |   'public'
351    |   'protected'
352    |   'private'
353    |   'static'
354    |   'abstract'
355    |   'final'
356    |   'native'
357    |   'synchronized'
358    |   'transient'
359    |   'volatile'
360    |   'strictfp'
361    )*
362    ;
363
364
365variableModifiers
366    :   (   'final'
367        |   annotation
368        )*
369    ;
370
371
372classDeclaration
373    :   normalClassDeclaration
374    |   enumDeclaration
375    ;
376
377normalClassDeclaration
378    :   modifiers  'class' IDENTIFIER
379        (typeParameters
380        )?
381        ('extends' type
382        )?
383        ('implements' typeList
384        )?
385        classBody
386    ;
387
388
389typeParameters
390    :   '<'
391            typeParameter
392            (',' typeParameter
393            )*
394        '>'
395    ;
396
397typeParameter
398    :   IDENTIFIER
399        ('extends' typeBound
400        )?
401    ;
402
403
404typeBound
405    :   type
406        ('&' type
407        )*
408    ;
409
410
411enumDeclaration
412    :   modifiers
413        ('enum'
414        )
415        IDENTIFIER
416        ('implements' typeList
417        )?
418        enumBody
419    ;
420
421
422enumBody
423    :   '{'
424        (enumConstants
425        )?
426        ','?
427        (enumBodyDeclarations
428        )?
429        '}'
430    ;
431
432enumConstants
433    :   enumConstant
434        (',' enumConstant
435        )*
436    ;
437
438/**
439 * NOTE: here differs from the javac grammar, missing TypeArguments.
440 * EnumeratorDeclaration = AnnotationsOpt [TypeArguments] IDENTIFIER [ Arguments ] [ "{" ClassBody "}" ]
441 */
442enumConstant
443    :   (annotations
444        )?
445        IDENTIFIER
446        (arguments
447        )?
448        (classBody
449        )?
450        /* TODO: $GScope::name = names.empty. enum constant body is actually
451        an anonymous class, where constructor isn't allowed, have to add this check*/
452    ;
453
454enumBodyDeclarations
455    :   ';'
456        (classBodyDeclaration
457        )*
458    ;
459
460interfaceDeclaration
461    :   normalInterfaceDeclaration
462    |   annotationTypeDeclaration
463    ;
464
465normalInterfaceDeclaration
466    :   modifiers 'interface' IDENTIFIER
467        (typeParameters
468        )?
469        ('extends' typeList
470        )?
471        interfaceBody
472    ;
473
474typeList
475    :   type
476        (',' type
477        )*
478    ;
479
480classBody
481    :   '{'
482        (classBodyDeclaration
483        )*
484        '}'
485    ;
486
487interfaceBody
488    :   '{'
489        (interfaceBodyDeclaration
490        )*
491        '}'
492    ;
493
494classBodyDeclaration
495    :   ';'
496    |   ('static'
497        )?
498        block
499    |   memberDecl
500    ;
501
502memberDecl
503    :    fieldDeclaration
504    |    methodDeclaration
505    |    classDeclaration
506    |    interfaceDeclaration
507    ;
508
509
510methodDeclaration
511    :
512        /* For constructor, return type is null, name is 'init' */
513         modifiers
514        (typeParameters
515        )?
516        IDENTIFIER
517        formalParameters
518        ('throws' qualifiedNameList
519        )?
520        '{'
521        (explicitConstructorInvocation
522        )?
523        (blockStatement
524        )*
525        '}'
526    |   modifiers
527        (typeParameters
528        )?
529        (type
530        |   'void'
531        )
532        IDENTIFIER
533        formalParameters
534        ('[' ']'
535        )*
536        ('throws' qualifiedNameList
537        )?
538        (
539            block
540        |   ';'
541        )
542    ;
543
544
545fieldDeclaration
546    :   modifiers
547        type
548        variableDeclarator
549        (',' variableDeclarator
550        )*
551        ';'
552    ;
553
554variableDeclarator
555    :   IDENTIFIER
556        ('[' ']'
557        )*
558        ('=' variableInitializer
559        )?
560    ;
561
562/**
563 *TODO: add predicates
564 */
565interfaceBodyDeclaration
566    :
567        interfaceFieldDeclaration
568    |   interfaceMethodDeclaration
569    |   interfaceDeclaration
570    |   classDeclaration
571    |   ';'
572    ;
573
574interfaceMethodDeclaration
575    :   modifiers
576        (typeParameters
577        )?
578        (type
579        |'void'
580        )
581        IDENTIFIER
582        formalParameters
583        ('[' ']'
584        )*
585        ('throws' qualifiedNameList
586        )? ';'
587    ;
588
589/**
590 * NOTE, should not use variableDeclarator here, as it doesn't necessary require
591 * an initializer, while an interface field does, or judge by the returned value.
592 * But this gives better diagnostic message, or antlr won't predict this rule.
593 */
594interfaceFieldDeclaration
595    :   modifiers type variableDeclarator
596        (',' variableDeclarator
597        )*
598        ';'
599    ;
600
601
602type
603    :   classOrInterfaceType
604        ('[' ']'
605        )*
606    |   primitiveType
607        ('[' ']'
608        )*
609    ;
610
611
612classOrInterfaceType
613    :   IDENTIFIER
614        (typeArguments
615        )?
616        ('.' IDENTIFIER
617            (typeArguments
618            )?
619        )*
620    ;
621
622primitiveType
623    :   'boolean'
624    |   'char'
625    |   'byte'
626    |   'short'
627    |   'int'
628    |   'long'
629    |   'float'
630    |   'double'
631    ;
632
633typeArguments
634    :   '<' typeArgument
635        (',' typeArgument
636        )*
637        '>'
638    ;
639
640typeArgument
641    :   type
642    |   '?'
643        (
644            ('extends'
645            |'super'
646            )
647            type
648        )?
649    ;
650
651qualifiedNameList
652    :   qualifiedName
653        (',' qualifiedName
654        )*
655    ;
656
657formalParameters
658    :   '('
659        (formalParameterDecls
660        )?
661        ')'
662    ;
663
664formalParameterDecls
665    :   ellipsisParameterDecl
666    |   normalParameterDecl
667        (',' normalParameterDecl
668        )*
669    |   (normalParameterDecl
670        ','
671        )+
672        ellipsisParameterDecl
673    ;
674
675normalParameterDecl
676    :   variableModifiers type IDENTIFIER
677        ('[' ']'
678        )*
679    ;
680
681ellipsisParameterDecl
682    :   variableModifiers
683        type  '...'
684        IDENTIFIER
685    ;
686
687
688explicitConstructorInvocation
689    :   (nonWildcardTypeArguments
690        )?     //NOTE: the position of Identifier 'super' is set to the type args position here
691        ('this'
692        |'super'
693        )
694        arguments ';'
695
696    |   primary
697        '.'
698        (nonWildcardTypeArguments
699        )?
700        'super'
701        arguments ';'
702    ;
703
704qualifiedName
705    :   IDENTIFIER
706        ('.' IDENTIFIER
707        )*
708    ;
709
710annotations
711    :   (annotation
712        )+
713    ;
714
715/**
716 *  Using an annotation.
717 * '@' is flaged in modifier
718 */
719annotation
720    :   '@' qualifiedName
721        (   '('
722                  (   elementValuePairs
723                  |   elementValue
724                  )?
725            ')'
726        )?
727    ;
728
729elementValuePairs
730    :   elementValuePair
731        (',' elementValuePair
732        )*
733    ;
734
735elementValuePair
736    :   IDENTIFIER '=' elementValue
737    ;
738
739elementValue
740    :   conditionalExpression
741    |   annotation
742    |   elementValueArrayInitializer
743    ;
744
745elementValueArrayInitializer
746    :   '{'
747        (elementValue
748            (',' elementValue
749            )*
750        )? (',')? '}'
751    ;
752
753
754/**
755 * Annotation declaration.
756 */
757annotationTypeDeclaration
758    :   modifiers '@'
759        'interface'
760        IDENTIFIER
761        annotationTypeBody
762    ;
763
764
765annotationTypeBody
766    :   '{'
767        (annotationTypeElementDeclaration
768        )*
769        '}'
770    ;
771
772/**
773 * NOTE: here use interfaceFieldDeclaration for field declared inside annotation. they are sytactically the same.
774 */
775annotationTypeElementDeclaration
776    :   annotationMethodDeclaration
777    |   interfaceFieldDeclaration
778    |   normalClassDeclaration
779    |   normalInterfaceDeclaration
780    |   enumDeclaration
781    |   annotationTypeDeclaration
782    |   ';'
783    ;
784
785annotationMethodDeclaration
786    :   modifiers type IDENTIFIER
787        '(' ')' ('default' elementValue
788                )?
789        ';'
790        ;
791
792block
793    :   '{'
794        (blockStatement
795        )*
796        '}'
797    ;
798
799/*
800staticBlock returns [JCBlock tree]
801        @init {
802            ListBuffer<JCStatement> stats = new ListBuffer<JCStatement>();
803            int pos = ((AntlrJavacToken) $start).getStartIndex();
804        }
805        @after {
806            $tree = T.at(pos).Block(Flags.STATIC, stats.toList());
807            pu.storeEnd($tree, $stop);
808            // construct a dummy static modifiers for end position
809            pu.storeEnd(T.at(pos).Modifiers(Flags.STATIC,  com.sun.tools.javac.util.List.<JCAnnotation>nil()),$st);
810        }
811    :   st_1='static' '{'
812        (blockStatement
813            {
814                if ($blockStatement.tree == null) {
815                    stats.appendList($blockStatement.list);
816                } else {
817                    stats.append($blockStatement.tree);
818                }
819            }
820        )* '}'
821    ;
822*/
823blockStatement
824    :   localVariableDeclarationStatement
825    |   classOrInterfaceDeclaration
826    |   statement
827    ;
828
829
830localVariableDeclarationStatement
831    :   localVariableDeclaration
832        ';'
833    ;
834
835localVariableDeclaration
836    :   variableModifiers type
837        variableDeclarator
838        (',' variableDeclarator
839        )*
840    ;
841
842statement
843    :   block
844
845    |   ('assert'
846        )
847        expression (':' expression)? ';'
848    |   'assert'  expression (':' expression)? ';'
849    |   'if' parExpression statement ('else' statement)?
850    |   forstatement
851    |   'while' parExpression statement
852    |   'do' statement 'while' parExpression ';'
853    |   trystatement
854    |   'switch' parExpression '{' switchBlockStatementGroups '}'
855    |   'synchronized' parExpression block
856    |   'return' (expression )? ';'
857    |   'throw' expression ';'
858    |   'break'
859            (IDENTIFIER
860            )? ';'
861    |   'continue'
862            (IDENTIFIER
863            )? ';'
864    |   expression  ';'
865    |   IDENTIFIER ':' statement
866    |   ';'
867
868    ;
869
870switchBlockStatementGroups
871    :   (switchBlockStatementGroup )*
872    ;
873
874switchBlockStatementGroup
875    :
876        switchLabel
877        (blockStatement
878        )*
879    ;
880
881switchLabel
882    :   'case' expression ':'
883    |   'default' ':'
884    ;
885
886
887trystatement
888    :   'try' block
889        (   catches 'finally' block
890        |   catches
891        |   'finally' block
892        )
893     ;
894
895catches
896    :   catchClause
897        (catchClause
898        )*
899    ;
900
901catchClause
902    :   'catch' '(' formalParameter
903        ')' block
904    ;
905
906formalParameter
907    :   variableModifiers type IDENTIFIER
908        ('[' ']'
909        )*
910    ;
911
912forstatement
913    :
914        // enhanced for loop
915        'for' '(' variableModifiers type IDENTIFIER ':'
916        expression ')' statement
917
918        // normal for loop
919    |   'for' '('
920                (forInit
921                )? ';'
922                (expression
923                )? ';'
924                (expressionList
925                )? ')' statement
926    ;
927
928forInit
929    :   localVariableDeclaration
930    |   expressionList
931    ;
932
933parExpression
934    :   '(' expression ')'
935    ;
936
937expressionList
938    :   expression
939        (',' expression
940        )*
941    ;
942
943
944expression
945    :   conditionalExpression
946        (assignmentOperator expression
947        )?
948    ;
949
950
951assignmentOperator
952    :   '='
953    |   '+='
954    |   '-='
955    |   '*='
956    |   '/='
957    |   '&='
958    |   '|='
959    |   '^='
960    |   '%='
961    |    '<' '<' '='
962    |    '>' '>' '>' '='
963    |    '>' '>' '='
964    ;
965
966
967conditionalExpression
968    :   conditionalOrExpression
969        ('?' expression ':' conditionalExpression
970        )?
971    ;
972
973conditionalOrExpression
974    :   conditionalAndExpression
975        ('||' conditionalAndExpression
976        )*
977    ;
978
979conditionalAndExpression
980    :   inclusiveOrExpression
981        ('&&' inclusiveOrExpression
982        )*
983    ;
984
985inclusiveOrExpression
986    :   exclusiveOrExpression
987        ('|' exclusiveOrExpression
988        )*
989    ;
990
991exclusiveOrExpression
992    :   andExpression
993        ('^' andExpression
994        )*
995    ;
996
997andExpression
998    :   equalityExpression
999        ('&' equalityExpression
1000        )*
1001    ;
1002
1003equalityExpression
1004    :   instanceOfExpression
1005        (
1006            (   '=='
1007            |   '!='
1008            )
1009            instanceOfExpression
1010        )*
1011    ;
1012
1013instanceOfExpression
1014    :   relationalExpression
1015        ('instanceof' type
1016        )?
1017    ;
1018
1019relationalExpression
1020    :   shiftExpression
1021        (relationalOp shiftExpression
1022        )*
1023    ;
1024
1025relationalOp
1026    :    '<' '='
1027    |    '>' '='
1028    |   '<'
1029    |   '>'
1030    ;
1031
1032shiftExpression
1033    :   additiveExpression
1034        (shiftOp additiveExpression
1035        )*
1036    ;
1037
1038
1039shiftOp
1040    :    '<' '<'
1041    |    '>' '>' '>'
1042    |    '>' '>'
1043    ;
1044
1045
1046additiveExpression
1047    :   multiplicativeExpression
1048        (
1049            (   '+'
1050            |   '-'
1051            )
1052            multiplicativeExpression
1053         )*
1054    ;
1055
1056multiplicativeExpression
1057    :
1058        unaryExpression
1059        (
1060            (   '*'
1061            |   '/'
1062            |   '%'
1063            )
1064            unaryExpression
1065        )*
1066    ;
1067
1068/**
1069 * NOTE: for '+' and '-', if the next token is int or long interal, then it's not a unary expression.
1070 *       it's a literal with signed value. INTLTERAL AND LONG LITERAL are added here for this.
1071 */
1072unaryExpression
1073    :   '+'  unaryExpression
1074    |   '-' unaryExpression
1075    |   '++' unaryExpression
1076    |   '--' unaryExpression
1077    |   unaryExpressionNotPlusMinus
1078    ;
1079
1080unaryExpressionNotPlusMinus
1081    :   '~' unaryExpression
1082    |   '!' unaryExpression
1083    |   castExpression
1084    |   primary
1085        (selector
1086        )*
1087        (   '++'
1088        |   '--'
1089        )?
1090    ;
1091
1092castExpression
1093    :   '(' primitiveType ')' unaryExpression
1094    |   '(' type ')' unaryExpressionNotPlusMinus
1095    ;
1096
1097/**
1098 * have to use scope here, parameter passing isn't well supported in antlr.
1099 */
1100primary
1101    :   parExpression
1102    |   'this'
1103        ('.' IDENTIFIER
1104        )*
1105        (identifierSuffix
1106        )?
1107    |   IDENTIFIER
1108        ('.' IDENTIFIER
1109        )*
1110        (identifierSuffix
1111        )?
1112    |   'super'
1113        superSuffix
1114    |   literal
1115    |   creator
1116    |   primitiveType
1117        ('[' ']'
1118        )*
1119        '.' 'class'
1120    |   'void' '.' 'class'
1121    ;
1122
1123
1124superSuffix
1125    :   arguments
1126    |   '.' (typeArguments
1127        )?
1128        IDENTIFIER
1129        (arguments
1130        )?
1131    ;
1132
1133
1134identifierSuffix
1135    :   ('[' ']'
1136        )+
1137        '.' 'class'
1138    |   ('[' expression ']'
1139        )+
1140    |   arguments
1141    |   '.' 'class'
1142    |   '.' nonWildcardTypeArguments IDENTIFIER arguments
1143    |   '.' 'this'
1144    |   '.' 'super' arguments
1145    |   innerCreator
1146    ;
1147
1148
1149selector
1150    :   '.' IDENTIFIER
1151        (arguments
1152        )?
1153    |   '.' 'this'
1154    |   '.' 'super'
1155        superSuffix
1156    |   innerCreator
1157    |   '[' expression ']'
1158    ;
1159
1160creator
1161    :   'new' nonWildcardTypeArguments classOrInterfaceType classCreatorRest
1162    |   'new' classOrInterfaceType classCreatorRest
1163    |   arrayCreator
1164    ;
1165
1166arrayCreator
1167    :   'new' createdName
1168        '[' ']'
1169        ('[' ']'
1170        )*
1171        arrayInitializer
1172
1173    |   'new' createdName
1174        '[' expression
1175        ']'
1176        (   '[' expression
1177            ']'
1178        )*
1179        ('[' ']'
1180        )*
1181    ;
1182
1183variableInitializer
1184    :   arrayInitializer
1185    |   expression
1186    ;
1187
1188arrayInitializer
1189    :   '{'
1190            (variableInitializer
1191                (',' variableInitializer
1192                )*
1193            )?
1194            (',')?
1195        '}'             //Yang's fix, position change.
1196    ;
1197
1198
1199createdName
1200    :   classOrInterfaceType
1201    |   primitiveType
1202    ;
1203
1204innerCreator
1205    :   '.' 'new'
1206        (nonWildcardTypeArguments
1207        )?
1208        IDENTIFIER
1209        (typeArguments
1210        )?
1211        classCreatorRest
1212    ;
1213
1214
1215classCreatorRest
1216    :   arguments
1217        (classBody
1218        )?
1219    ;
1220
1221
1222nonWildcardTypeArguments
1223    :   '<' typeList
1224        '>'
1225    ;
1226
1227arguments
1228    :   '(' (expressionList
1229        )? ')'
1230    ;
1231
1232literal
1233    :   INTLITERAL
1234    |   LONGLITERAL
1235    |   FLOATLITERAL
1236    |   DOUBLELITERAL
1237    |   CHARLITERAL
1238    |   STRINGLITERAL
1239    |   TRUE
1240    |   FALSE
1241    |   NULL
1242    ;
1243
1244/**
1245 * These are headers help to make syntatical predicates, not necessary but helps to make grammar faster.
1246 */
1247
1248classHeader
1249    :   modifiers 'class' IDENTIFIER
1250    ;
1251
1252enumHeader
1253    :   modifiers ('enum'|IDENTIFIER) IDENTIFIER
1254    ;
1255
1256interfaceHeader
1257    :   modifiers 'interface' IDENTIFIER
1258    ;
1259
1260annotationHeader
1261    :   modifiers '@' 'interface' IDENTIFIER
1262    ;
1263
1264typeHeader
1265    :   modifiers ('class'|'enum'|('@' ? 'interface')) IDENTIFIER
1266    ;
1267
1268methodHeader
1269    :   modifiers typeParameters? (type|'void')? IDENTIFIER '('
1270    ;
1271
1272fieldHeader
1273    :   modifiers type IDENTIFIER ('['']')* ('='|','|';')
1274    ;
1275
1276localVariableHeader
1277    :   variableModifiers type IDENTIFIER ('['']')* ('='|','|';')
1278    ;
1279
1280
1281
1282
1283/********************************************************************************************
1284                  Lexer section
1285*********************************************************************************************/
1286
1287LONGLITERAL
1288    :   IntegerNumber LongSuffix
1289    ;
1290
1291
1292INTLITERAL
1293    :   IntegerNumber
1294    ;
1295
1296fragment
1297IntegerNumber
1298    :   '0'
1299    |   '1'..'9' ('0'..'9')*
1300    |   '0' ('0'..'7')+
1301    |   HexPrefix HexDigit+
1302    ;
1303
1304fragment
1305HexPrefix
1306    :   '0x' | '0X'
1307    ;
1308
1309fragment
1310HexDigit
1311    :   ('0'..'9'|'a'..'f'|'A'..'F')
1312    ;
1313
1314fragment
1315LongSuffix
1316    :   'l' | 'L'
1317    ;
1318
1319
1320fragment
1321NonIntegerNumber
1322    :   ('0' .. '9')+ '.' ('0' .. '9')* Exponent?
1323    |   '.' ( '0' .. '9' )+ Exponent?
1324    |   ('0' .. '9')+ Exponent
1325    |   ('0' .. '9')+
1326    |
1327        HexPrefix (HexDigit )*
1328        (    ()
1329        |    ('.' (HexDigit )* )
1330        )
1331        ( 'p' | 'P' )
1332        ( '+' | '-' )?
1333        ( '0' .. '9' )+
1334        ;
1335
1336fragment
1337Exponent
1338    :   ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+
1339    ;
1340
1341fragment
1342FloatSuffix
1343    :   'f' | 'F'
1344    ;
1345
1346fragment
1347DoubleSuffix
1348    :   'd' | 'D'
1349    ;
1350
1351FLOATLITERAL
1352    :   NonIntegerNumber FloatSuffix
1353    ;
1354
1355DOUBLELITERAL
1356    :   NonIntegerNumber DoubleSuffix?
1357    ;
1358
1359CHARLITERAL
1360    :   ( '\''
1361        (   EscapeSequence
1362        |   ~( '\'' | '\\' | '\r' | '\n' )
1363        | UNICODECHAR
1364        )
1365        '\'' )
1366    ;
1367
1368STRINGLITERAL
1369    :   '"'
1370        (   EscapeSequence
1371        |   ~( '\\' | '"' | '\r' | '\n' )
1372        | UNICODECHAR
1373        )*
1374        '"'
1375    ;
1376
1377fragment
1378UNICODECHAR
1379    : '\\' 'u' UNICODEPART UNICODEPART UNICODEPART UNICODEPART
1380    ;
1381
1382fragment
1383UNICODEPART
1384    : ( '0'
1385      | '1'
1386      | '2'
1387      | '3'
1388      | '4'
1389      | '5'
1390      | '6'
1391      | '7'
1392      | '8'
1393      | '9'
1394      | 'A'
1395      | 'B'
1396      | 'C'
1397      | 'D'
1398      | 'E'
1399      | 'F'
1400      | 'a'
1401      | 'b'
1402      | 'c'
1403      | 'd'
1404      | 'e'
1405      | 'f'
1406      )
1407    ;
1408
1409fragment
1410EscapeSequence
1411    :   '\\' (
1412                 'b'
1413             |   't'
1414             |   'n'
1415             |   'f'
1416             |   'r'
1417             |   '\"'
1418             |   '\''
1419             |   '\\'
1420             |
1421                 ('0'..'3') ('0'..'7') ('0'..'7')
1422             |
1423                 ('0'..'7') ('0'..'7')
1424             |
1425                 ('0'..'7')
1426             )
1427;
1428
1429WS
1430    :   (
1431             ' '
1432        |    '\r'
1433        |    '\t'
1434        |    '\u000C'
1435        |    '\n'
1436        )
1437            {
1438                skip();
1439            }
1440    ;
1441
1442COMMENT
1443         @init{
1444            boolean isJavaDoc = false;
1445        }
1446    :   '/*'
1447            {
1448                if((char)input.LA(1) == '*'){
1449                    isJavaDoc = true;
1450                }
1451            }
1452        (options {greedy=false;} : . )*
1453        '*/'
1454            {
1455                if(isJavaDoc==true){
1456                    $channel=HIDDEN;
1457                }else{
1458                    skip();
1459                }
1460            }
1461    ;
1462
1463LINE_COMMENT
1464    :   '//' ~('\n'|'\r')*  ('\r\n' | '\r' | '\n')
1465            {
1466                skip();
1467            }
1468    |   '//' ~('\n'|'\r')*     // a line comment could appear at the end of the file without CR/LF
1469            {
1470                skip();
1471            }
1472    ;
1473
1474ABSTRACT
1475    :   'abstract'
1476    ;
1477
1478ASSERT
1479    :   'assert'
1480    ;
1481
1482BOOLEAN
1483    :   'boolean'
1484    ;
1485
1486BREAK
1487    :   'break'
1488    ;
1489
1490BYTE
1491    :   'byte'
1492    ;
1493
1494CASE
1495    :   'case'
1496    ;
1497
1498CATCH
1499    :   'catch'
1500    ;
1501
1502CHAR
1503    :   'char'
1504    ;
1505
1506CLASS
1507    :   'class'
1508    ;
1509
1510CONST
1511    :   'const'
1512    ;
1513
1514CONTINUE
1515    :   'continue'
1516    ;
1517
1518DEFAULT
1519    :   'default'
1520    ;
1521
1522DO
1523    :   'do'
1524    ;
1525
1526DOUBLE
1527    :   'double'
1528    ;
1529
1530ELSE
1531    :   'else'
1532    ;
1533
1534ENUM
1535    :   'enum'
1536    ;
1537
1538EXTENDS
1539    :   'extends'
1540    ;
1541
1542FINAL
1543    :   'final'
1544    ;
1545
1546FINALLY
1547    :   'finally'
1548    ;
1549
1550FLOAT
1551    :   'float'
1552    ;
1553
1554FOR
1555    :   'for'
1556    ;
1557
1558GOTO
1559    :   'goto'
1560    ;
1561
1562IF
1563    :   'if'
1564    ;
1565
1566IMPLEMENTS
1567    :   'implements'
1568    ;
1569
1570IMPORT
1571    :   'import'
1572    ;
1573
1574INSTANCEOF
1575    :   'instanceof'
1576    ;
1577
1578INT
1579    :   'int'
1580    ;
1581
1582INTERFACE
1583    :   'interface'
1584    ;
1585
1586LONG
1587    :   'long'
1588    ;
1589
1590NATIVE
1591    :   'native'
1592    ;
1593
1594NEW
1595    :   'new'
1596    ;
1597
1598PACKAGE
1599    :   'package'
1600    ;
1601
1602PRIVATE
1603    :   'private'
1604    ;
1605
1606PROTECTED
1607    :   'protected'
1608    ;
1609
1610PUBLIC
1611    :   'public'
1612    ;
1613
1614RETURN
1615    :   'return'
1616    ;
1617
1618SHORT
1619    :   'short'
1620    ;
1621
1622STATIC
1623    :   'static'
1624    ;
1625
1626STRICTFP
1627    :   'strictfp'
1628    ;
1629
1630SUPER
1631    :   'super'
1632    ;
1633
1634SWITCH
1635    :   'switch'
1636    ;
1637
1638SYNCHRONIZED
1639    :   'synchronized'
1640    ;
1641
1642THIS
1643    :   'this'
1644    ;
1645
1646THROW
1647    :   'throw'
1648    ;
1649
1650THROWS
1651    :   'throws'
1652    ;
1653
1654TRANSIENT
1655    :   'transient'
1656    ;
1657
1658TRY
1659    :   'try'
1660    ;
1661
1662VOID
1663    :   'void'
1664    ;
1665
1666VOLATILE
1667    :   'volatile'
1668    ;
1669
1670WHILE
1671    :   'while'
1672    ;
1673
1674TRUE
1675    :   'true'
1676    ;
1677
1678FALSE
1679    :   'false'
1680    ;
1681
1682NULL
1683    :   'null'
1684    ;
1685
1686LPAREN
1687    :   '('
1688    ;
1689
1690RPAREN
1691    :   ')'
1692    ;
1693
1694LBRACE
1695    :   '{'
1696    ;
1697
1698RBRACE
1699    :   '}'
1700    ;
1701
1702LBRACKET
1703    :   '['
1704    ;
1705
1706RBRACKET
1707    :   ']'
1708    ;
1709
1710SEMI
1711    :   ';'
1712    ;
1713
1714COMMA
1715    :   ','
1716    ;
1717
1718DOT
1719    :   '.'
1720    ;
1721
1722ELLIPSIS
1723    :   '...'
1724    ;
1725
1726EQ
1727    :   '='
1728    ;
1729
1730BANG
1731    :   '!'
1732    ;
1733
1734TILDE
1735    :   '~'
1736    ;
1737
1738QUES
1739    :   '?'
1740    ;
1741
1742COLON
1743    :   ':'
1744    ;
1745
1746EQEQ
1747    :   '=='
1748    ;
1749
1750AMPAMP
1751    :   '&&'
1752    ;
1753
1754BARBAR
1755    :   '||'
1756    ;
1757
1758PLUSPLUS
1759    :   '++'
1760    ;
1761
1762SUBSUB
1763    :   '--'
1764    ;
1765
1766PLUS
1767    :   '+'
1768    ;
1769
1770SUB
1771    :   '-'
1772    ;
1773
1774STAR
1775    :   '*'
1776    ;
1777
1778SLASH
1779    :   '/'
1780    ;
1781
1782AMP
1783    :   '&'
1784    ;
1785
1786BAR
1787    :   '|'
1788    ;
1789
1790CARET
1791    :   '^'
1792    ;
1793
1794PERCENT
1795    :   '%'
1796    ;
1797
1798PLUSEQ
1799    :   '+='
1800    ;
1801
1802SUBEQ
1803    :   '-='
1804    ;
1805
1806STAREQ
1807    :   '*='
1808    ;
1809
1810SLASHEQ
1811    :   '/='
1812    ;
1813
1814AMPEQ
1815    :   '&='
1816    ;
1817
1818BAREQ
1819    :   '|='
1820    ;
1821
1822CARETEQ
1823    :   '^='
1824    ;
1825
1826PERCENTEQ
1827    :   '%='
1828    ;
1829
1830MONKEYS_AT
1831    :   '@'
1832    ;
1833
1834BANGEQ
1835    :   '!='
1836    ;
1837
1838GT
1839    :   '>'
1840    ;
1841
1842LT
1843    :   '<'
1844    ;
1845
1846IDENTIFIER
1847    :   IdentifierStart IdentifierPart*
1848    ;
1849
1850fragment
1851SurrogateIdentifer
1852    :   ('\ud800'..'\udbff') ('\udc00'..'\udfff')
1853    ;
1854
1855fragment
1856IdentifierStart
1857    :   '\u0024'
1858    |   '\u0041'..'\u005a'
1859    |   '\u005f'
1860    |   '\u0061'..'\u007a'
1861    |   '\u00a2'..'\u00a5'
1862    |   '\u00aa'
1863    |   '\u00b5'
1864    |   '\u00ba'
1865    |   '\u00c0'..'\u00d6'
1866    |   '\u00d8'..'\u00f6'
1867    |   '\u00f8'..'\u0236'
1868    |   '\u0250'..'\u02c1'
1869    |   '\u02c6'..'\u02d1'
1870    |   '\u02e0'..'\u02e4'
1871    |   '\u02ee'
1872    |   '\u037a'
1873    |   '\u0386'
1874    |   '\u0388'..'\u038a'
1875    |   '\u038c'
1876    |   '\u038e'..'\u03a1'
1877    |   '\u03a3'..'\u03ce'
1878    |   '\u03d0'..'\u03f5'
1879    |   '\u03f7'..'\u03fb'
1880    |   '\u0400'..'\u0481'
1881    |   '\u048a'..'\u04ce'
1882    |   '\u04d0'..'\u04f5'
1883    |   '\u04f8'..'\u04f9'
1884    |   '\u0500'..'\u050f'
1885    |   '\u0531'..'\u0556'
1886    |   '\u0559'
1887    |   '\u0561'..'\u0587'
1888    |   '\u05d0'..'\u05ea'
1889    |   '\u05f0'..'\u05f2'
1890    |   '\u0621'..'\u063a'
1891    |   '\u0640'..'\u064a'
1892    |   '\u066e'..'\u066f'
1893    |   '\u0671'..'\u06d3'
1894    |   '\u06d5'
1895    |   '\u06e5'..'\u06e6'
1896    |   '\u06ee'..'\u06ef'
1897    |   '\u06fa'..'\u06fc'
1898    |   '\u06ff'
1899    |   '\u0710'
1900    |   '\u0712'..'\u072f'
1901    |   '\u074d'..'\u074f'
1902    |   '\u0780'..'\u07a5'
1903    |   '\u07b1'
1904    |   '\u0904'..'\u0939'
1905    |   '\u093d'
1906    |   '\u0950'
1907    |   '\u0958'..'\u0961'
1908    |   '\u0985'..'\u098c'
1909    |   '\u098f'..'\u0990'
1910    |   '\u0993'..'\u09a8'
1911    |   '\u09aa'..'\u09b0'
1912    |   '\u09b2'
1913    |   '\u09b6'..'\u09b9'
1914    |   '\u09bd'
1915    |   '\u09dc'..'\u09dd'
1916    |   '\u09df'..'\u09e1'
1917    |   '\u09f0'..'\u09f3'
1918    |   '\u0a05'..'\u0a0a'
1919    |   '\u0a0f'..'\u0a10'
1920    |   '\u0a13'..'\u0a28'
1921    |   '\u0a2a'..'\u0a30'
1922    |   '\u0a32'..'\u0a33'
1923    |   '\u0a35'..'\u0a36'
1924    |   '\u0a38'..'\u0a39'
1925    |   '\u0a59'..'\u0a5c'
1926    |   '\u0a5e'
1927    |   '\u0a72'..'\u0a74'
1928    |   '\u0a85'..'\u0a8d'
1929    |   '\u0a8f'..'\u0a91'
1930    |   '\u0a93'..'\u0aa8'
1931    |   '\u0aaa'..'\u0ab0'
1932    |   '\u0ab2'..'\u0ab3'
1933    |   '\u0ab5'..'\u0ab9'
1934    |   '\u0abd'
1935    |   '\u0ad0'
1936    |   '\u0ae0'..'\u0ae1'
1937    |   '\u0af1'
1938    |   '\u0b05'..'\u0b0c'
1939    |   '\u0b0f'..'\u0b10'
1940    |   '\u0b13'..'\u0b28'
1941    |   '\u0b2a'..'\u0b30'
1942    |   '\u0b32'..'\u0b33'
1943    |   '\u0b35'..'\u0b39'
1944    |   '\u0b3d'
1945    |   '\u0b5c'..'\u0b5d'
1946    |   '\u0b5f'..'\u0b61'
1947    |   '\u0b71'
1948    |   '\u0b83'
1949    |   '\u0b85'..'\u0b8a'
1950    |   '\u0b8e'..'\u0b90'
1951    |   '\u0b92'..'\u0b95'
1952    |   '\u0b99'..'\u0b9a'
1953    |   '\u0b9c'
1954    |   '\u0b9e'..'\u0b9f'
1955    |   '\u0ba3'..'\u0ba4'
1956    |   '\u0ba8'..'\u0baa'
1957    |   '\u0bae'..'\u0bb5'
1958    |   '\u0bb7'..'\u0bb9'
1959    |   '\u0bf9'
1960    |   '\u0c05'..'\u0c0c'
1961    |   '\u0c0e'..'\u0c10'
1962    |   '\u0c12'..'\u0c28'
1963    |   '\u0c2a'..'\u0c33'
1964    |   '\u0c35'..'\u0c39'
1965    |   '\u0c60'..'\u0c61'
1966    |   '\u0c85'..'\u0c8c'
1967    |   '\u0c8e'..'\u0c90'
1968    |   '\u0c92'..'\u0ca8'
1969    |   '\u0caa'..'\u0cb3'
1970    |   '\u0cb5'..'\u0cb9'
1971    |   '\u0cbd'
1972    |   '\u0cde'
1973    |   '\u0ce0'..'\u0ce1'
1974    |   '\u0d05'..'\u0d0c'
1975    |   '\u0d0e'..'\u0d10'
1976    |   '\u0d12'..'\u0d28'
1977    |   '\u0d2a'..'\u0d39'
1978    |   '\u0d60'..'\u0d61'
1979    |   '\u0d85'..'\u0d96'
1980    |   '\u0d9a'..'\u0db1'
1981    |   '\u0db3'..'\u0dbb'
1982    |   '\u0dbd'
1983    |   '\u0dc0'..'\u0dc6'
1984    |   '\u0e01'..'\u0e30'
1985    |   '\u0e32'..'\u0e33'
1986    |   '\u0e3f'..'\u0e46'
1987    |   '\u0e81'..'\u0e82'
1988    |   '\u0e84'
1989    |   '\u0e87'..'\u0e88'
1990    |   '\u0e8a'
1991    |   '\u0e8d'
1992    |   '\u0e94'..'\u0e97'
1993    |   '\u0e99'..'\u0e9f'
1994    |   '\u0ea1'..'\u0ea3'
1995    |   '\u0ea5'
1996    |   '\u0ea7'
1997    |   '\u0eaa'..'\u0eab'
1998    |   '\u0ead'..'\u0eb0'
1999    |   '\u0eb2'..'\u0eb3'
2000    |   '\u0ebd'
2001    |   '\u0ec0'..'\u0ec4'
2002    |   '\u0ec6'
2003    |   '\u0edc'..'\u0edd'
2004    |   '\u0f00'
2005    |   '\u0f40'..'\u0f47'
2006    |   '\u0f49'..'\u0f6a'
2007    |   '\u0f88'..'\u0f8b'
2008    |   '\u1000'..'\u1021'
2009    |   '\u1023'..'\u1027'
2010    |   '\u1029'..'\u102a'
2011    |   '\u1050'..'\u1055'
2012    |   '\u10a0'..'\u10c5'
2013    |   '\u10d0'..'\u10f8'
2014    |   '\u1100'..'\u1159'
2015    |   '\u115f'..'\u11a2'
2016    |   '\u11a8'..'\u11f9'
2017    |   '\u1200'..'\u1206'
2018    |   '\u1208'..'\u1246'
2019    |   '\u1248'
2020    |   '\u124a'..'\u124d'
2021    |   '\u1250'..'\u1256'
2022    |   '\u1258'
2023    |   '\u125a'..'\u125d'
2024    |   '\u1260'..'\u1286'
2025    |   '\u1288'
2026    |   '\u128a'..'\u128d'
2027    |   '\u1290'..'\u12ae'
2028    |   '\u12b0'
2029    |   '\u12b2'..'\u12b5'
2030    |   '\u12b8'..'\u12be'
2031    |   '\u12c0'
2032    |   '\u12c2'..'\u12c5'
2033    |   '\u12c8'..'\u12ce'
2034    |   '\u12d0'..'\u12d6'
2035    |   '\u12d8'..'\u12ee'
2036    |   '\u12f0'..'\u130e'
2037    |   '\u1310'
2038    |   '\u1312'..'\u1315'
2039    |   '\u1318'..'\u131e'
2040    |   '\u1320'..'\u1346'
2041    |   '\u1348'..'\u135a'
2042    |   '\u13a0'..'\u13f4'
2043    |   '\u1401'..'\u166c'
2044    |   '\u166f'..'\u1676'
2045    |   '\u1681'..'\u169a'
2046    |   '\u16a0'..'\u16ea'
2047    |   '\u16ee'..'\u16f0'
2048    |   '\u1700'..'\u170c'
2049    |   '\u170e'..'\u1711'
2050    |   '\u1720'..'\u1731'
2051    |   '\u1740'..'\u1751'
2052    |   '\u1760'..'\u176c'
2053    |   '\u176e'..'\u1770'
2054    |   '\u1780'..'\u17b3'
2055    |   '\u17d7'
2056    |   '\u17db'..'\u17dc'
2057    |   '\u1820'..'\u1877'
2058    |   '\u1880'..'\u18a8'
2059    |   '\u1900'..'\u191c'
2060    |   '\u1950'..'\u196d'
2061    |   '\u1970'..'\u1974'
2062    |   '\u1d00'..'\u1d6b'
2063    |   '\u1e00'..'\u1e9b'
2064    |   '\u1ea0'..'\u1ef9'
2065    |   '\u1f00'..'\u1f15'
2066    |   '\u1f18'..'\u1f1d'
2067    |   '\u1f20'..'\u1f45'
2068    |   '\u1f48'..'\u1f4d'
2069    |   '\u1f50'..'\u1f57'
2070    |   '\u1f59'
2071    |   '\u1f5b'
2072    |   '\u1f5d'
2073    |   '\u1f5f'..'\u1f7d'
2074    |   '\u1f80'..'\u1fb4'
2075    |   '\u1fb6'..'\u1fbc'
2076    |   '\u1fbe'
2077    |   '\u1fc2'..'\u1fc4'
2078    |   '\u1fc6'..'\u1fcc'
2079    |   '\u1fd0'..'\u1fd3'
2080    |   '\u1fd6'..'\u1fdb'
2081    |   '\u1fe0'..'\u1fec'
2082    |   '\u1ff2'..'\u1ff4'
2083    |   '\u1ff6'..'\u1ffc'
2084    |   '\u203f'..'\u2040'
2085    |   '\u2054'
2086    |   '\u2071'
2087    |   '\u207f'
2088    |   '\u20a0'..'\u20b1'
2089    |   '\u2102'
2090    |   '\u2107'
2091    |   '\u210a'..'\u2113'
2092    |   '\u2115'
2093    |   '\u2119'..'\u211d'
2094    |   '\u2124'
2095    |   '\u2126'
2096    |   '\u2128'
2097    |   '\u212a'..'\u212d'
2098    |   '\u212f'..'\u2131'
2099    |   '\u2133'..'\u2139'
2100    |   '\u213d'..'\u213f'
2101    |   '\u2145'..'\u2149'
2102    |   '\u2160'..'\u2183'
2103    |   '\u3005'..'\u3007'
2104    |   '\u3021'..'\u3029'
2105    |   '\u3031'..'\u3035'
2106    |   '\u3038'..'\u303c'
2107    |   '\u3041'..'\u3096'
2108    |   '\u309d'..'\u309f'
2109    |   '\u30a1'..'\u30ff'
2110    |   '\u3105'..'\u312c'
2111    |   '\u3131'..'\u318e'
2112    |   '\u31a0'..'\u31b7'
2113    |   '\u31f0'..'\u31ff'
2114    |   '\u3400'..'\u4db5'
2115    |   '\u4e00'..'\u9fa5'
2116    |   '\ua000'..'\ua48c'
2117    |   '\uac00'..'\ud7a3'
2118    |   '\uf900'..'\ufa2d'
2119    |   '\ufa30'..'\ufa6a'
2120    |   '\ufb00'..'\ufb06'
2121    |   '\ufb13'..'\ufb17'
2122    |   '\ufb1d'
2123    |   '\ufb1f'..'\ufb28'
2124    |   '\ufb2a'..'\ufb36'
2125    |   '\ufb38'..'\ufb3c'
2126    |   '\ufb3e'
2127    |   '\ufb40'..'\ufb41'
2128    |   '\ufb43'..'\ufb44'
2129    |   '\ufb46'..'\ufbb1'
2130    |   '\ufbd3'..'\ufd3d'
2131    |   '\ufd50'..'\ufd8f'
2132    |   '\ufd92'..'\ufdc7'
2133    |   '\ufdf0'..'\ufdfc'
2134    |   '\ufe33'..'\ufe34'
2135    |   '\ufe4d'..'\ufe4f'
2136    |   '\ufe69'
2137    |   '\ufe70'..'\ufe74'
2138    |   '\ufe76'..'\ufefc'
2139    |   '\uff04'
2140    |   '\uff21'..'\uff3a'
2141    |   '\uff3f'
2142    |   '\uff41'..'\uff5a'
2143    |   '\uff65'..'\uffbe'
2144    |   '\uffc2'..'\uffc7'
2145    |   '\uffca'..'\uffcf'
2146    |   '\uffd2'..'\uffd7'
2147    |   '\uffda'..'\uffdc'
2148    |   '\uffe0'..'\uffe1'
2149    |   '\uffe5'..'\uffe6'
2150    |   ('\ud800'..'\udbff') ('\udc00'..'\udfff')
2151    ;
2152
2153fragment
2154IdentifierPart
2155    :   '\u0000'..'\u0008'
2156    |   '\u000e'..'\u001b'
2157    |   '\u0024'
2158    |   '\u0030'..'\u0039'
2159    |   '\u0041'..'\u005a'
2160    |   '\u005f'
2161    |   '\u0061'..'\u007a'
2162    |   '\u007f'..'\u009f'
2163    |   '\u00a2'..'\u00a5'
2164    |   '\u00aa'
2165    |   '\u00ad'
2166    |   '\u00b5'
2167    |   '\u00ba'
2168    |   '\u00c0'..'\u00d6'
2169    |   '\u00d8'..'\u00f6'
2170    |   '\u00f8'..'\u0236'
2171    |   '\u0250'..'\u02c1'
2172    |   '\u02c6'..'\u02d1'
2173    |   '\u02e0'..'\u02e4'
2174    |   '\u02ee'
2175    |   '\u0300'..'\u0357'
2176    |   '\u035d'..'\u036f'
2177    |   '\u037a'
2178    |   '\u0386'
2179    |   '\u0388'..'\u038a'
2180    |   '\u038c'
2181    |   '\u038e'..'\u03a1'
2182    |   '\u03a3'..'\u03ce'
2183    |   '\u03d0'..'\u03f5'
2184    |   '\u03f7'..'\u03fb'
2185    |   '\u0400'..'\u0481'
2186    |   '\u0483'..'\u0486'
2187    |   '\u048a'..'\u04ce'
2188    |   '\u04d0'..'\u04f5'
2189    |   '\u04f8'..'\u04f9'
2190    |   '\u0500'..'\u050f'
2191    |   '\u0531'..'\u0556'
2192    |   '\u0559'
2193    |   '\u0561'..'\u0587'
2194    |   '\u0591'..'\u05a1'
2195    |   '\u05a3'..'\u05b9'
2196    |   '\u05bb'..'\u05bd'
2197    |   '\u05bf'
2198    |   '\u05c1'..'\u05c2'
2199    |   '\u05c4'
2200    |   '\u05d0'..'\u05ea'
2201    |   '\u05f0'..'\u05f2'
2202    |   '\u0600'..'\u0603'
2203    |   '\u0610'..'\u0615'
2204    |   '\u0621'..'\u063a'
2205    |   '\u0640'..'\u0658'
2206    |   '\u0660'..'\u0669'
2207    |   '\u066e'..'\u06d3'
2208    |   '\u06d5'..'\u06dd'
2209    |   '\u06df'..'\u06e8'
2210    |   '\u06ea'..'\u06fc'
2211    |   '\u06ff'
2212    |   '\u070f'..'\u074a'
2213    |   '\u074d'..'\u074f'
2214    |   '\u0780'..'\u07b1'
2215    |   '\u0901'..'\u0939'
2216    |   '\u093c'..'\u094d'
2217    |   '\u0950'..'\u0954'
2218    |   '\u0958'..'\u0963'
2219    |   '\u0966'..'\u096f'
2220    |   '\u0981'..'\u0983'
2221    |   '\u0985'..'\u098c'
2222    |   '\u098f'..'\u0990'
2223    |   '\u0993'..'\u09a8'
2224    |   '\u09aa'..'\u09b0'
2225    |   '\u09b2'
2226    |   '\u09b6'..'\u09b9'
2227    |   '\u09bc'..'\u09c4'
2228    |   '\u09c7'..'\u09c8'
2229    |   '\u09cb'..'\u09cd'
2230    |   '\u09d7'
2231    |   '\u09dc'..'\u09dd'
2232    |   '\u09df'..'\u09e3'
2233    |   '\u09e6'..'\u09f3'
2234    |   '\u0a01'..'\u0a03'
2235    |   '\u0a05'..'\u0a0a'
2236    |   '\u0a0f'..'\u0a10'
2237    |   '\u0a13'..'\u0a28'
2238    |   '\u0a2a'..'\u0a30'
2239    |   '\u0a32'..'\u0a33'
2240    |   '\u0a35'..'\u0a36'
2241    |   '\u0a38'..'\u0a39'
2242    |   '\u0a3c'
2243    |   '\u0a3e'..'\u0a42'
2244    |   '\u0a47'..'\u0a48'
2245    |   '\u0a4b'..'\u0a4d'
2246    |   '\u0a59'..'\u0a5c'
2247    |   '\u0a5e'
2248    |   '\u0a66'..'\u0a74'
2249    |   '\u0a81'..'\u0a83'
2250    |   '\u0a85'..'\u0a8d'
2251    |   '\u0a8f'..'\u0a91'
2252    |   '\u0a93'..'\u0aa8'
2253    |   '\u0aaa'..'\u0ab0'
2254    |   '\u0ab2'..'\u0ab3'
2255    |   '\u0ab5'..'\u0ab9'
2256    |   '\u0abc'..'\u0ac5'
2257    |   '\u0ac7'..'\u0ac9'
2258    |   '\u0acb'..'\u0acd'
2259    |   '\u0ad0'
2260    |   '\u0ae0'..'\u0ae3'
2261    |   '\u0ae6'..'\u0aef'
2262    |   '\u0af1'
2263    |   '\u0b01'..'\u0b03'
2264    |   '\u0b05'..'\u0b0c'
2265    |   '\u0b0f'..'\u0b10'
2266    |   '\u0b13'..'\u0b28'
2267    |   '\u0b2a'..'\u0b30'
2268    |   '\u0b32'..'\u0b33'
2269    |   '\u0b35'..'\u0b39'
2270    |   '\u0b3c'..'\u0b43'
2271    |   '\u0b47'..'\u0b48'
2272    |   '\u0b4b'..'\u0b4d'
2273    |   '\u0b56'..'\u0b57'
2274    |   '\u0b5c'..'\u0b5d'
2275    |   '\u0b5f'..'\u0b61'
2276    |   '\u0b66'..'\u0b6f'
2277    |   '\u0b71'
2278    |   '\u0b82'..'\u0b83'
2279    |   '\u0b85'..'\u0b8a'
2280    |   '\u0b8e'..'\u0b90'
2281    |   '\u0b92'..'\u0b95'
2282    |   '\u0b99'..'\u0b9a'
2283    |   '\u0b9c'
2284    |   '\u0b9e'..'\u0b9f'
2285    |   '\u0ba3'..'\u0ba4'
2286    |   '\u0ba8'..'\u0baa'
2287    |   '\u0bae'..'\u0bb5'
2288    |   '\u0bb7'..'\u0bb9'
2289    |   '\u0bbe'..'\u0bc2'
2290    |   '\u0bc6'..'\u0bc8'
2291    |   '\u0bca'..'\u0bcd'
2292    |   '\u0bd7'
2293    |   '\u0be7'..'\u0bef'
2294    |   '\u0bf9'
2295    |   '\u0c01'..'\u0c03'
2296    |   '\u0c05'..'\u0c0c'
2297    |   '\u0c0e'..'\u0c10'
2298    |   '\u0c12'..'\u0c28'
2299    |   '\u0c2a'..'\u0c33'
2300    |   '\u0c35'..'\u0c39'
2301    |   '\u0c3e'..'\u0c44'
2302    |   '\u0c46'..'\u0c48'
2303    |   '\u0c4a'..'\u0c4d'
2304    |   '\u0c55'..'\u0c56'
2305    |   '\u0c60'..'\u0c61'
2306    |   '\u0c66'..'\u0c6f'
2307    |   '\u0c82'..'\u0c83'
2308    |   '\u0c85'..'\u0c8c'
2309    |   '\u0c8e'..'\u0c90'
2310    |   '\u0c92'..'\u0ca8'
2311    |   '\u0caa'..'\u0cb3'
2312    |   '\u0cb5'..'\u0cb9'
2313    |   '\u0cbc'..'\u0cc4'
2314    |   '\u0cc6'..'\u0cc8'
2315    |   '\u0cca'..'\u0ccd'
2316    |   '\u0cd5'..'\u0cd6'
2317    |   '\u0cde'
2318    |   '\u0ce0'..'\u0ce1'
2319    |   '\u0ce6'..'\u0cef'
2320    |   '\u0d02'..'\u0d03'
2321    |   '\u0d05'..'\u0d0c'
2322    |   '\u0d0e'..'\u0d10'
2323    |   '\u0d12'..'\u0d28'
2324    |   '\u0d2a'..'\u0d39'
2325    |   '\u0d3e'..'\u0d43'
2326    |   '\u0d46'..'\u0d48'
2327    |   '\u0d4a'..'\u0d4d'
2328    |   '\u0d57'
2329    |   '\u0d60'..'\u0d61'
2330    |   '\u0d66'..'\u0d6f'
2331    |   '\u0d82'..'\u0d83'
2332    |   '\u0d85'..'\u0d96'
2333    |   '\u0d9a'..'\u0db1'
2334    |   '\u0db3'..'\u0dbb'
2335    |   '\u0dbd'
2336    |   '\u0dc0'..'\u0dc6'
2337    |   '\u0dca'
2338    |   '\u0dcf'..'\u0dd4'
2339    |   '\u0dd6'
2340    |   '\u0dd8'..'\u0ddf'
2341    |   '\u0df2'..'\u0df3'
2342    |   '\u0e01'..'\u0e3a'
2343    |   '\u0e3f'..'\u0e4e'
2344    |   '\u0e50'..'\u0e59'
2345    |   '\u0e81'..'\u0e82'
2346    |   '\u0e84'
2347    |   '\u0e87'..'\u0e88'
2348    |   '\u0e8a'
2349    |   '\u0e8d'
2350    |   '\u0e94'..'\u0e97'
2351    |   '\u0e99'..'\u0e9f'
2352    |   '\u0ea1'..'\u0ea3'
2353    |   '\u0ea5'
2354    |   '\u0ea7'
2355    |   '\u0eaa'..'\u0eab'
2356    |   '\u0ead'..'\u0eb9'
2357    |   '\u0ebb'..'\u0ebd'
2358    |   '\u0ec0'..'\u0ec4'
2359    |   '\u0ec6'
2360    |   '\u0ec8'..'\u0ecd'
2361    |   '\u0ed0'..'\u0ed9'
2362    |   '\u0edc'..'\u0edd'
2363    |   '\u0f00'
2364    |   '\u0f18'..'\u0f19'
2365    |   '\u0f20'..'\u0f29'
2366    |   '\u0f35'
2367    |   '\u0f37'
2368    |   '\u0f39'
2369    |   '\u0f3e'..'\u0f47'
2370    |   '\u0f49'..'\u0f6a'
2371    |   '\u0f71'..'\u0f84'
2372    |   '\u0f86'..'\u0f8b'
2373    |   '\u0f90'..'\u0f97'
2374    |   '\u0f99'..'\u0fbc'
2375    |   '\u0fc6'
2376    |   '\u1000'..'\u1021'
2377    |   '\u1023'..'\u1027'
2378    |   '\u1029'..'\u102a'
2379    |   '\u102c'..'\u1032'
2380    |   '\u1036'..'\u1039'
2381    |   '\u1040'..'\u1049'
2382    |   '\u1050'..'\u1059'
2383    |   '\u10a0'..'\u10c5'
2384    |   '\u10d0'..'\u10f8'
2385    |   '\u1100'..'\u1159'
2386    |   '\u115f'..'\u11a2'
2387    |   '\u11a8'..'\u11f9'
2388    |   '\u1200'..'\u1206'
2389    |   '\u1208'..'\u1246'
2390    |   '\u1248'
2391    |   '\u124a'..'\u124d'
2392    |   '\u1250'..'\u1256'
2393    |   '\u1258'
2394    |   '\u125a'..'\u125d'
2395    |   '\u1260'..'\u1286'
2396    |   '\u1288'
2397    |   '\u128a'..'\u128d'
2398    |   '\u1290'..'\u12ae'
2399    |   '\u12b0'
2400    |   '\u12b2'..'\u12b5'
2401    |   '\u12b8'..'\u12be'
2402    |   '\u12c0'
2403    |   '\u12c2'..'\u12c5'
2404    |   '\u12c8'..'\u12ce'
2405    |   '\u12d0'..'\u12d6'
2406    |   '\u12d8'..'\u12ee'
2407    |   '\u12f0'..'\u130e'
2408    |   '\u1310'
2409    |   '\u1312'..'\u1315'
2410    |   '\u1318'..'\u131e'
2411    |   '\u1320'..'\u1346'
2412    |   '\u1348'..'\u135a'
2413    |   '\u1369'..'\u1371'
2414    |   '\u13a0'..'\u13f4'
2415    |   '\u1401'..'\u166c'
2416    |   '\u166f'..'\u1676'
2417    |   '\u1681'..'\u169a'
2418    |   '\u16a0'..'\u16ea'
2419    |   '\u16ee'..'\u16f0'
2420    |   '\u1700'..'\u170c'
2421    |   '\u170e'..'\u1714'
2422    |   '\u1720'..'\u1734'
2423    |   '\u1740'..'\u1753'
2424    |   '\u1760'..'\u176c'
2425    |   '\u176e'..'\u1770'
2426    |   '\u1772'..'\u1773'
2427    |   '\u1780'..'\u17d3'
2428    |   '\u17d7'
2429    |   '\u17db'..'\u17dd'
2430    |   '\u17e0'..'\u17e9'
2431    |   '\u180b'..'\u180d'
2432    |   '\u1810'..'\u1819'
2433    |   '\u1820'..'\u1877'
2434    |   '\u1880'..'\u18a9'
2435    |   '\u1900'..'\u191c'
2436    |   '\u1920'..'\u192b'
2437    |   '\u1930'..'\u193b'
2438    |   '\u1946'..'\u196d'
2439    |   '\u1970'..'\u1974'
2440    |   '\u1d00'..'\u1d6b'
2441    |   '\u1e00'..'\u1e9b'
2442    |   '\u1ea0'..'\u1ef9'
2443    |   '\u1f00'..'\u1f15'
2444    |   '\u1f18'..'\u1f1d'
2445    |   '\u1f20'..'\u1f45'
2446    |   '\u1f48'..'\u1f4d'
2447    |   '\u1f50'..'\u1f57'
2448    |   '\u1f59'
2449    |   '\u1f5b'
2450    |   '\u1f5d'
2451    |   '\u1f5f'..'\u1f7d'
2452    |   '\u1f80'..'\u1fb4'
2453    |   '\u1fb6'..'\u1fbc'
2454    |   '\u1fbe'
2455    |   '\u1fc2'..'\u1fc4'
2456    |   '\u1fc6'..'\u1fcc'
2457    |   '\u1fd0'..'\u1fd3'
2458    |   '\u1fd6'..'\u1fdb'
2459    |   '\u1fe0'..'\u1fec'
2460    |   '\u1ff2'..'\u1ff4'
2461    |   '\u1ff6'..'\u1ffc'
2462    |   '\u200c'..'\u200f'
2463    |   '\u202a'..'\u202e'
2464    |   '\u203f'..'\u2040'
2465    |   '\u2054'
2466    |   '\u2060'..'\u2063'
2467    |   '\u206a'..'\u206f'
2468    |   '\u2071'
2469    |   '\u207f'
2470    |   '\u20a0'..'\u20b1'
2471    |   '\u20d0'..'\u20dc'
2472    |   '\u20e1'
2473    |   '\u20e5'..'\u20ea'
2474    |   '\u2102'
2475    |   '\u2107'
2476    |   '\u210a'..'\u2113'
2477    |   '\u2115'
2478    |   '\u2119'..'\u211d'
2479    |   '\u2124'
2480    |   '\u2126'
2481    |   '\u2128'
2482    |   '\u212a'..'\u212d'
2483    |   '\u212f'..'\u2131'
2484    |   '\u2133'..'\u2139'
2485    |   '\u213d'..'\u213f'
2486    |   '\u2145'..'\u2149'
2487    |   '\u2160'..'\u2183'
2488    |   '\u3005'..'\u3007'
2489    |   '\u3021'..'\u302f'
2490    |   '\u3031'..'\u3035'
2491    |   '\u3038'..'\u303c'
2492    |   '\u3041'..'\u3096'
2493    |   '\u3099'..'\u309a'
2494    |   '\u309d'..'\u309f'
2495    |   '\u30a1'..'\u30ff'
2496    |   '\u3105'..'\u312c'
2497    |   '\u3131'..'\u318e'
2498    |   '\u31a0'..'\u31b7'
2499    |   '\u31f0'..'\u31ff'
2500    |   '\u3400'..'\u4db5'
2501    |   '\u4e00'..'\u9fa5'
2502    |   '\ua000'..'\ua48c'
2503    |   '\uac00'..'\ud7a3'
2504    |   '\uf900'..'\ufa2d'
2505    |   '\ufa30'..'\ufa6a'
2506    |   '\ufb00'..'\ufb06'
2507    |   '\ufb13'..'\ufb17'
2508    |   '\ufb1d'..'\ufb28'
2509    |   '\ufb2a'..'\ufb36'
2510    |   '\ufb38'..'\ufb3c'
2511    |   '\ufb3e'
2512    |   '\ufb40'..'\ufb41'
2513    |   '\ufb43'..'\ufb44'
2514    |   '\ufb46'..'\ufbb1'
2515    |   '\ufbd3'..'\ufd3d'
2516    |   '\ufd50'..'\ufd8f'
2517    |   '\ufd92'..'\ufdc7'
2518    |   '\ufdf0'..'\ufdfc'
2519    |   '\ufe00'..'\ufe0f'
2520    |   '\ufe20'..'\ufe23'
2521    |   '\ufe33'..'\ufe34'
2522    |   '\ufe4d'..'\ufe4f'
2523    |   '\ufe69'
2524    |   '\ufe70'..'\ufe74'
2525    |   '\ufe76'..'\ufefc'
2526    |   '\ufeff'
2527    |   '\uff04'
2528    |   '\uff10'..'\uff19'
2529    |   '\uff21'..'\uff3a'
2530    |   '\uff3f'
2531    |   '\uff41'..'\uff5a'
2532    |   '\uff65'..'\uffbe'
2533    |   '\uffc2'..'\uffc7'
2534    |   '\uffca'..'\uffcf'
2535    |   '\uffd2'..'\uffd7'
2536    |   '\uffda'..'\uffdc'
2537    |   '\uffe0'..'\uffe1'
2538    |   '\uffe5'..'\uffe6'
2539    |   '\ufff9'..'\ufffb'
2540    |   ('\ud800'..'\udbff') ('\udc00'..'\udfff')
2541    ;
2542