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