Scarlet Line home page Scarlet Line - SOFTWARE DESIGN & DEVELOPMENT

[Home]->[Products]->[Syntac Universal Parser]

Expand All
Collapse All
Contents

Syntac Universal Parser

Syntac is a parser which reads an enhanced BNF file and produces C++ source code for a parser. It directly accepts a wide range of eBNF formats, such as those used in RFCs and by various ANSI and ISO committees. Unlike more traditional alternatives, such as Bison/Flex, it does not require the user to separate dictionary from grammar thus greatly simplifying use. It currently runs on Linux, Windows 2000/XP and Mac OS X.

Please see the documentation menu for a number of real life working example grammars.

Components

syntac binary

This program takes a <name>.syn file as input and produces a <name>.cxx and <name>.hxx pair of C++ source code files. It also produces a variety of documentation files as requested, mostly in Graphviz .dot format. The dot files can be converted to html documentation with the provided utilities. Here are the command line options:

$ syntac --help

syntac reads a .syn file and outputs source code and documentation

Usage: syntac [OPTION]... [FILE]...

Parameters:
  -S, --skeleton     Specify skeleton file
  -c, --defaults     Specify default.syn path
  -I, --include      Addition to the include path
  -M, --depends      Output dependencies suitable for make to stdout
  -E, --preprocess   Output preprocessed file to stdout
  -g, --debug        Include debug functionality in the generated parser
  -v, --verbose      Output details of the parse to stderr ( optional level from 1 - 5 )
  -t, --preopt       Output pre-optimized dot file
  -u, --precomp      Output pre-compiled dot file and html tables
  -d, --docs         Output parse tree and state diagram dot files for documentation generation
  -p, --parse_debug  Set the Parse Crawler Debug Level ( expects a number from 1 - 5 )
  -m, --match_debug  Set the Matcher Debug Level ( expects a number from 1 - 5 )
  -V, --version      Output the version and dependency information and exit


Report bugs to <syntac-bugs@scarletline.com>.
Web page http://www.scarletline.com/

libsynt shared library

This is a .so file on unix, a universal .dynlib file on Mac OSX and a .dll file on Windows. It is linked in to any executable which uses syntac to provide all of the syntac functions.

C++ Skeleton file

A default template skeleton file (syntac.template) which is filled in to create the cxx/hxx pair of output files.

Default Syntac Definitions File

Many grammars re-use the same rules over and over, such as the definition of a digit, the many aliases for various ascii and unicode character classes and control codes, comments, white-space and number returning classes. All of these are provided ( any can be overridden ) to greatly simplify the task of writing a grammar. Here is the entire set of default rules:

%explicit_whitespace
%type <void> blank space lws ws implicit_whitespace S LWSP WSP EOF CRLF CR LF

any		::= '[^\n]'

/*
 Here is the complete 7-bit ASCII range in familiar form:
 '[\z\x00-\x06\a\b\t\n\v\f\r\x0E-\x1F !\"#$%&\'()*+,\-\./0-9:;<=>?@A-Z\[\\\]^_`a-z{|}~\x7F]'
*/

/*
	ctype definitions
*/

/* Alphanumeric */
alnum	::= '[0-9A-Za-z]'

/* Alphabetic */
alpha	::= '[A-Za-z]'

/* ASCII character */
ascii	::= '[\x00-\x7F]'

/* Binary digit */
bdigit	::= '[01]'

/* Blank character */
blank	::= '[\t ]'

/* Control character */
cntrl	::= '[\x00-\x1F\x7F]'

/* Letter, underscore, or digit */
csym	::= '[0-9A-Z_a-z]'

/* Letter or underscore */
csymf	::= '[A-Z_a-z]'

/* Decimal digit */
digit	::= '[0-9]'

/* Printable character except space */
graph	::= '[\x21-\x7E]'

/* Letter or underscore */
head	::= '[A-Z_a-z]'

/* Lowercase letter */
lower	::= '[a-z]'

/* Octal digit */
odigit	::= '[0-7]'

/* Printable character including space */
print	::= '[\x20-\x7E]'

/* Punctuation character */
punct	::= '[!\"#$%&\'()*+,\-\./:;<=>?@\[\\\]^_`{|}~]'

/* White-space character */
space	::= '[\x09-\x0D\x20]'

/* Uppercase letter */
upper	::= '[A-Z]'

/* Letter, underscore, or digit */
word	::= '[0-9A-Z_a-z]'

/* Letter  */
word-head	::= '[A-Za-z]'

/* Hexadecimal digit */
xdigit	::= '[0-9A-Fa-f]'

comment	::=
		'\/\/[^\n]*$'					/* C++ comment */
	|	';[^\n]*$'						/* make/asm comment */
	|	'\/\*([^*]|\*[^/])*\*\/'		/* C comment */
	|	'<!--([^-]|-[^-]|--[^>])*-->'	/* HTML/XML comment */
	|	'#[^\n]*$'						/* perl comment */

/* linear white space ( past new line ) */
lws	::= ( '[\t\n\v\f\r ]' | comment )+

/* white space ( no new line ) */
ws	::=	( '[\t\r ]' | comment )+

/* default used when explicit_whitespace is not set */
implicit_whitespace	::=	lws?

/* default list seperator when list_seperator not set ( from rfc822) */
list_seperator	::=	lws? (',' lws?)+

S	::= ( '[\x09-\x0D\x20]' | comment )+

NUL ::= '\x00'	/* Control-@ null */

SOH ::= '\x01'	/* Control-A start of heading */

STX ::= '\x02'	/* Control-B start of text */

ETX ::= '\x03'	/* Control-C end of text */

EOT ::= '\x04'	/* Control-D end of transmission */

ENQ ::= '\x05'	/* Control-E enquiry */

ACK ::= '\x06'	/* Control-F acknowledge */

BEL ::= '\x07'	/* /a Ctrl-G bell or alert */

BS  ::= '\x08'	/* /b Ctrl-H backspace */

TAB ::= '\x09'	/* /t Ctrl-I horizontal tab */

LF  ::= '\x0A'	/* /n Ctrl-J line feed */

VT  ::= '\x0B'	/* /v Ctrl-K vertical tab */

FF  ::= '\x0C'	/* /f Ctrl-L form feed */

CR  ::= '\x0D'	/* /r Ctrl-M carriage return */

SO  ::= '\x0E'	/* Control-N shift out */

SI  ::= '\x0F'	/* Control-O shift in */

DLE ::= '\x10'	/* Control-P data link escape */

DC1 ::= '\x11'	/* Control-Q device control 1 */

DC2 ::= '\x12'	/* Control-R device control 2 */

DC3 ::= '\x13'	/* Control-S device control 3 */

DC4 ::= '\x14'	/* Control-T device control 4 */

NAK ::= '\x15'	/* Control-U negative acknowledge */

SYN ::= '\x16'	/* Control-V synchronous idle */

ETB ::= '\x17'	/* Control-W end of transmission block */

CAN ::= '\x18'	/* Control-X cancel */

EM  ::= '\x19'	/* Control-Y end of medium */

SUB ::= '\x1A'	/* Control-Z substitute */

ESC ::= '\x1B'	/* Control-[ escape */

FS  ::= '\x1C'	/* Control-\ file separator */

GS  ::= '\x1D'	/* Control-] group separator */

RS  ::= '\x1E'	/* Control-^ record separator */

US  ::= '\x1F'	/* Control-_ unit separator */

SP  ::= '\x20'	/* Control-` space */

HT	::= '\x09'	/* horizontal tab alternate */

NL  ::= '\x0A'	/* line feed alternate - new line */

EOF	::= '\z'		/* end of file */

/* ABNF Core Rules	see RFC 2234 */
ALPHA	::= '[A-Za-z]'

BIT		::= '[01]'

CHAR	::= '[\x01-\x7F]'	/* any 7-bit US-ASCII character, excluding NUL */

CRLF	::= '\x0D\x0A'	/* Internet standard newline */

CTL		::= '[\x00-\x1F\x7F]'	/* controls */

DIGIT	::= '[0-9]'	/* 0-9 */

DQUOTE	::= '"'		/* " (Double Quote) */

HEXDIG	::= '[0-9A-F]'

HTAB	::= '\x09'	/* horizontal tab */

LWSP	::= ( SP | HTAB | ( CR LF ( SP | HTAB ) ) )*	/* linear white space (past newline) */

OCTET	::= '[\x00-\xFF]' /* 8 bits of data */

VCHAR	::= '[\x21-\x7E]'	/* visible (printing) characters */

WSP		::= '[\t ]'		/* white space */

UPALPHA        ::= '[A-Z]' /* <any US-ASCII uppercase letter "A".."Z"> */

LOALPHA        ::= '[a-z]' /* <any US-ASCII lowercase letter "a".."z"> */

<">            ::= '\"'  /* <US-ASCII double-quote mark (34)> */

%type <short>		short_value
%type <int>			int_value
%type <long>		long_value
%type <float>		float_value
%type <double>		double_value
%type <bool>		bool_value
%type <unsigned int>	unsigned_int_value
%type <unsigned short>	unsigned_short_value
%type <unsigned long>	unsigned_long_value
%type <long double>	long_double_value

short_value ::= 			'[+\-]?[0-9]+'
	
unsigned_short_value ::=	'+?[0-9]+'
	
int_value ::= 				'[+\-]?[0-9]+'
	
unsigned_int_value ::=		'+?[0-9]+'
	
long_value ::= 				'[+\-]?[0-9]+'
	
unsigned_long_value ::=		'+?[0-9]+'
	
float_value ::=			'[+\-]?([0-9]+(\.[0-9]*)?|\.[0-9]+)([Ee][+\-]?[0-9]*)?'
	
double_value ::=		'[+\-]?([0-9]+(\.[0-9]*)?|\.[0-9]+)([Ee][+\-]?[0-9]*)?'
	
long_double_value ::=	'[+\-]?([0-9]+(\.[0-9]*)?|\.[0-9]+)([Ee][+\-]?[0-9]*)?'
	
bool_value ::=
		(('true'i | '1')	{ $$ = true; } )
	|	(('false'i | '0')	{ $$ = false; } )

/*
                    Positive	Negative
POSIX-style Syntax	[:type=value:]	[:^type=value:]
Perl-style Syntax	\p{type=value}	\P{type=value}

[:Lu:]
[:L:] == [[:Lu:][:Ll:][:Lt:][:Lm:][:Lo:]] == [:Letter:] == \p{Letter}

	To union two sets, simply concatenate them. For example, [[:letter:] [:number:]]

    To intersect two sets, use the '&' operator. For example, [[:letter:] & [a-z]]

	To take the set-difference of two sets, use the '-' operator. For example, [[:letter:] - [a-z]]

	To invert a set, place a '^' immediately after the opening '['. For example, [^a-z]. In any other location, the '^' does not have a special meaning.
*/
/* These character classes automatically generated from:
** http://www.unicode.org/Public/UNIDATA/extracted/DerivedGeneralCategory.txt
** DerivedGeneralCategory-5.0.0.txt Date: 2006-02-27, 23:41:27 GMT [MD]
*/
/* Character Class C	= Other */
Other ::= '[\x00-\x1F\x7F-\x9F\xAD\x0370-\x0373\x0376-\x0379\x037F-\x0383\x038B\x038D\x03A2\x03CF\x0487\x0514-\x0530\x0557\x0558\x0560\x0588\x058B-\x0590\x05C8-\x05CF\x05EB-\x05EF\x05F5-\x060A\x0616-\x061A\x061C\x061D\x0620\x063B-\x063F\x065F\x06DD\x070E\x070F\x074B\x074C\x076E-\x077F\x07B2-\x07BF\x07FB-\x0900\x093A\x093B\x094E\x094F\x0955-\x0957\x0971-\x097A\x0980\x0984\x098D\x098E\x0991\x0992\x09A9\x09B1\x09B3-\x09B5\x09BA\x09BB\x09C5\x09C6\x09C9\x09CA\x09CF-\x09D6\x09D8-\x09DB\x09DE\x09E4\x09E5\x09FB-\x0A00\x0A04\x0A0B-\x0A0E\x0A11\x0A12\x0A29\x0A31\x0A34\x0A37\x0A3A\x0A3B\x0A3D\x0A43-\x0A46\x0A49\x0A4A\x0A4E-\x0A58\x0A5D\x0A5F-\x0A65\x0A75-\x0A80\x0A84\x0A8E\x0A92\x0AA9\x0AB1\x0AB4\x0ABA\x0ABB\x0AC6\x0ACA\x0ACE\x0ACF\x0AD1-\x0ADF\x0AE4\x0AE5\x0AF0\x0AF2-\x0B00\x0B04\x0B0D\x0B0E\x0B11\x0B12\x0B29\x0B31\x0B34\x0B3A\x0B3B\x0B44-\x0B46\x0B49\x0B4A\x0B4E-\x0B55\x0B58-\x0B5B\x0B5E\x0B62-\x0B65\x0B72-\x0B81\x0B84\x0B8B-\x0B8D\x0B91\x0B96-\x0B98\x0B9B\x0B9D\x0BA0-\x0BA2\x0BA5-\x0BA7\x0BAB-\x0BAD\x0BBA-\x0BBD\x0BC3-\x0BC5\x0BC9\x0BCE-\x0BD6\x0BD8-\x0BE5\x0BFB-\x0C00\x0C04\x0C0D\x0C11\x0C29\x0C34\x0C3A-\x0C3D\x0C45\x0C49\x0C4E-\x0C54\x0C57-\x0C5F\x0C62-\x0C65\x0C70-\x0C81\x0C84\x0C8D\x0C91\x0CA9\x0CB4\x0CBA\x0CBB\x0CC5\x0CC9\x0CCE-\x0CD4\x0CD7-\x0CDD\x0CDF\x0CE4\x0CE5\x0CF0\x0CF3-\x0D01\x0D04\x0D0D\x0D11\x0D29\x0D3A-\x0D3D\x0D44\x0D45\x0D49\x0D4E-\x0D56\x0D58-\x0D5F\x0D62-\x0D65\x0D70-\x0D81\x0D84\x0D97-\x0D99\x0DB2\x0DBC\x0DBE\x0DBF\x0DC7-\x0DC9\x0DCB-\x0DCE\x0DD5\x0DD7\x0DE0-\x0DF1\x0DF5-\x0E00\x0E3B-\x0E3E\x0E5C-\x0E80\x0E83\x0E85\x0E86\x0E89\x0E8B\x0E8C\x0E8E-\x0E93\x0E98\x0EA0\x0EA4\x0EA6\x0EA8\x0EA9\x0EAC\x0EBA\x0EBE\x0EBF\x0EC5\x0EC7\x0ECE\x0ECF\x0EDA\x0EDB\x0EDE-\x0EFF\x0F48\x0F6B-\x0F70\x0F8C-\x0F8F\x0F98\x0FBD\x0FCD\x0FCE\x0FD2-\x0FFF\x1022\x1028\x102B\x1033-\x1035\x103A-\x103F\x105A-\x109F\x10C6-\x10CF\x10FD-\x10FF\x115A-\x115E\x11A3-\x11A7\x11FA-\x11FF\x1249\x124E\x124F\x1257\x1259\x125E\x125F\x1289\x128E\x128F\x12B1\x12B6\x12B7\x12BF\x12C1\x12C6\x12C7\x12D7\x1311\x1316\x1317\x135B-\x135E\x137D-\x137F\x139A-\x139F\x13F5-\x1400\x1677-\x167F\x169D-\x169F\x16F1-\x16FF\x170D\x1715-\x171F\x1737-\x173F\x1754-\x175F\x176D\x1771\x1774-\x177F\x17B4\x17B5\x17DE\x17DF\x17EA-\x17EF\x17FA-\x17FF\x180F\x181A-\x181F\x1878-\x187F\x18AA-\x18FF\x191D-\x191F\x192C-\x192F\x193C-\x193F\x1941-\x1943\x196E\x196F\x1975-\x197F\x19AA-\x19AF\x19CA-\x19CF\x19DA-\x19DD\x1A1C\x1A1D\x1A20-\x1AFF\x1B4C-\x1B4F\x1B7D-\x1CFF\x1DCB-\x1DFD\x1E9C-\x1E9F\x1EFA-\x1EFF\x1F16\x1F17\x1F1E\x1F1F\x1F46\x1F47\x1F4E\x1F4F\x1F58\x1F5A\x1F5C\x1F5E\x1F7E\x1F7F\x1FB5\x1FC5\x1FD4\x1FD5\x1FDC\x1FF0\x1FF1\x1FF5\x1FFF\x200B-\x200F\x202A-\x202E\x2060-\x206F\x2072\x2073\x208F\x2095-\x209F\x20B6-\x20CF\x20F0-\x20FF\x214F-\x2152\x2185-\x218F\x23E8-\x23FF\x2427-\x243F\x244B-\x245F\x269D-\x269F\x26B3-\x2700\x2705\x270A\x270B\x2728\x274C\x274E\x2753-\x2755\x2757\x275F\x2760\x2795-\x2797\x27B0\x27BF\x27CB-\x27CF\x27EC-\x27EF\x2B1B-\x2B1F\x2B24-\x2BFF\x2C2F\x2C5F\x2C6D-\x2C73\x2C78-\x2C7F\x2CEB-\x2CF8\x2D26-\x2D2F\x2D66-\x2D6E\x2D70-\x2D7F\x2D97-\x2D9F\x2DA7\x2DAF\x2DB7\x2DBF\x2DC7\x2DCF\x2DD7\x2DDF-\x2DFF\x2E18-\x2E1B\x2E1E-\x2E7F\x2E9A\x2EF4-\x2EFF\x2FD6-\x2FEF\x2FFC-\x2FFF\x3040\x3097\x3098\x3100-\x3104\x312D-\x3130\x318F\x31B8-\x31BF\x31D0-\x31EF\x321F\x3244-\x324F\x32FF\x4DB6-\x4DBF\x9FBC-\x9FFF\xA48D-\xA48F\xA4C7-\xA6FF\xA71B-\xA71F\xA722-\xA7FF\xA82C-\xA83F\xA878-\xABFF\xD7A4-\xF8FF\xFA2E\xFA2F\xFA6B-\xFA6F\xFADA-\xFAFF\xFB07-\xFB12\xFB18-\xFB1C\xFB37\xFB3D\xFB3F\xFB42\xFB45\xFBB2-\xFBD2\xFD40-\xFD4F\xFD90\xFD91\xFDC8-\xFDEF\xFDFE\xFDFF\xFE1A-\xFE1F\xFE24-\xFE2F\xFE53\xFE67\xFE6C-\xFE6F\xFE75\xFEFD-\xFF00\xFFBF-\xFFC1\xFFC8\xFFC9\xFFD0\xFFD1\xFFD8\xFFD9\xFFDD-\xFFDF\xFFE7\xFFEF-\xFFFB\xFFFE\xFFFF\x1000C\x10027\x1003B\x1003E\x1004E\x1004F\x1005E-\x1007F\x100FB-\x100FF\x10103-\x10106\x10134-\x10136\x1018B-\x102FF\x1031F\x10324-\x1032F\x1034B-\x1037F\x1039E\x103C4-\x103C7\x103D6-\x103FF\x1049E\x1049F\x104AA-\x107FF\x10806\x10807\x10809\x10836\x10839-\x1083B\x1083D\x1083E\x10840-\x108FF\x1091A-\x1091E\x10920-\x109FF\x10A04\x10A07-\x10A0B\x10A14\x10A18\x10A34-\x10A37\x10A3B-\x10A3E\x10A48-\x10A4F\x10A59-\x11FFF\x1236F-\x123FF\x12463-\x1246F\x12474-\x1CFFF\x1D0F6-\x1D0FF\x1D127-\x1D129\x1D173-\x1D17A\x1D1DE-\x1D1FF\x1D246-\x1D2FF\x1D357-\x1D35F\x1D372-\x1D3FF\x1D455\x1D49D\x1D4A0\x1D4A1\x1D4A3\x1D4A4\x1D4A7\x1D4A8\x1D4AD\x1D4BA\x1D4BC\x1D4C4\x1D506\x1D50B\x1D50C\x1D515\x1D51D\x1D53A\x1D53F\x1D545\x1D547-\x1D549\x1D551\x1D6A6\x1D6A7\x1D7CC\x1D7CD\x1D800-\x1FFFF\x2A6D7-\x2F7FF\x2FA1E-\xE00FF\xE01F0-\x10FFFF]'

/* Character Class Cc	= Control */
Control ::= '[\x00-\x1F\x7F-\x9F]'

/* Character Class Cf	= Format */
Format ::= '[\xAD\x0600-\x0603\x06DD\x070F\x17B4\x17B5\x200B-\x200F\x202A-\x202E\x2060-\x2063\x206A-\x206F\xFEFF\xFFF9-\xFFFB\x1D173-\x1D17A\xE0001\xE0020-\xE007F]'

/* Character Class Cn	= Unassigned */
Unassigned ::= '[\x0370-\x0373\x0376-\x0379\x037F-\x0383\x038B\x038D\x03A2\x03CF\x0487\x0514-\x0530\x0557\x0558\x0560\x0588\x058B-\x0590\x05C8-\x05CF\x05EB-\x05EF\x05F5-\x05FF\x0604-\x060A\x0616-\x061A\x061C\x061D\x0620\x063B-\x063F\x065F\x070E\x074B\x074C\x076E-\x077F\x07B2-\x07BF\x07FB-\x0900\x093A\x093B\x094E\x094F\x0955-\x0957\x0971-\x097A\x0980\x0984\x098D\x098E\x0991\x0992\x09A9\x09B1\x09B3-\x09B5\x09BA\x09BB\x09C5\x09C6\x09C9\x09CA\x09CF-\x09D6\x09D8-\x09DB\x09DE\x09E4\x09E5\x09FB-\x0A00\x0A04\x0A0B-\x0A0E\x0A11\x0A12\x0A29\x0A31\x0A34\x0A37\x0A3A\x0A3B\x0A3D\x0A43-\x0A46\x0A49\x0A4A\x0A4E-\x0A58\x0A5D\x0A5F-\x0A65\x0A75-\x0A80\x0A84\x0A8E\x0A92\x0AA9\x0AB1\x0AB4\x0ABA\x0ABB\x0AC6\x0ACA\x0ACE\x0ACF\x0AD1-\x0ADF\x0AE4\x0AE5\x0AF0\x0AF2-\x0B00\x0B04\x0B0D\x0B0E\x0B11\x0B12\x0B29\x0B31\x0B34\x0B3A\x0B3B\x0B44-\x0B46\x0B49\x0B4A\x0B4E-\x0B55\x0B58-\x0B5B\x0B5E\x0B62-\x0B65\x0B72-\x0B81\x0B84\x0B8B-\x0B8D\x0B91\x0B96-\x0B98\x0B9B\x0B9D\x0BA0-\x0BA2\x0BA5-\x0BA7\x0BAB-\x0BAD\x0BBA-\x0BBD\x0BC3-\x0BC5\x0BC9\x0BCE-\x0BD6\x0BD8-\x0BE5\x0BFB-\x0C00\x0C04\x0C0D\x0C11\x0C29\x0C34\x0C3A-\x0C3D\x0C45\x0C49\x0C4E-\x0C54\x0C57-\x0C5F\x0C62-\x0C65\x0C70-\x0C81\x0C84\x0C8D\x0C91\x0CA9\x0CB4\x0CBA\x0CBB\x0CC5\x0CC9\x0CCE-\x0CD4\x0CD7-\x0CDD\x0CDF\x0CE4\x0CE5\x0CF0\x0CF3-\x0D01\x0D04\x0D0D\x0D11\x0D29\x0D3A-\x0D3D\x0D44\x0D45\x0D49\x0D4E-\x0D56\x0D58-\x0D5F\x0D62-\x0D65\x0D70-\x0D81\x0D84\x0D97-\x0D99\x0DB2\x0DBC\x0DBE\x0DBF\x0DC7-\x0DC9\x0DCB-\x0DCE\x0DD5\x0DD7\x0DE0-\x0DF1\x0DF5-\x0E00\x0E3B-\x0E3E\x0E5C-\x0E80\x0E83\x0E85\x0E86\x0E89\x0E8B\x0E8C\x0E8E-\x0E93\x0E98\x0EA0\x0EA4\x0EA6\x0EA8\x0EA9\x0EAC\x0EBA\x0EBE\x0EBF\x0EC5\x0EC7\x0ECE\x0ECF\x0EDA\x0EDB\x0EDE-\x0EFF\x0F48\x0F6B-\x0F70\x0F8C-\x0F8F\x0F98\x0FBD\x0FCD\x0FCE\x0FD2-\x0FFF\x1022\x1028\x102B\x1033-\x1035\x103A-\x103F\x105A-\x109F\x10C6-\x10CF\x10FD-\x10FF\x115A-\x115E\x11A3-\x11A7\x11FA-\x11FF\x1249\x124E\x124F\x1257\x1259\x125E\x125F\x1289\x128E\x128F\x12B1\x12B6\x12B7\x12BF\x12C1\x12C6\x12C7\x12D7\x1311\x1316\x1317\x135B-\x135E\x137D-\x137F\x139A-\x139F\x13F5-\x1400\x1677-\x167F\x169D-\x169F\x16F1-\x16FF\x170D\x1715-\x171F\x1737-\x173F\x1754-\x175F\x176D\x1771\x1774-\x177F\x17DE\x17DF\x17EA-\x17EF\x17FA-\x17FF\x180F\x181A-\x181F\x1878-\x187F\x18AA-\x18FF\x191D-\x191F\x192C-\x192F\x193C-\x193F\x1941-\x1943\x196E\x196F\x1975-\x197F\x19AA-\x19AF\x19CA-\x19CF\x19DA-\x19DD\x1A1C\x1A1D\x1A20-\x1AFF\x1B4C-\x1B4F\x1B7D-\x1CFF\x1DCB-\x1DFD\x1E9C-\x1E9F\x1EFA-\x1EFF\x1F16\x1F17\x1F1E\x1F1F\x1F46\x1F47\x1F4E\x1F4F\x1F58\x1F5A\x1F5C\x1F5E\x1F7E\x1F7F\x1FB5\x1FC5\x1FD4\x1FD5\x1FDC\x1FF0\x1FF1\x1FF5\x1FFF\x2064-\x2069\x2072\x2073\x208F\x2095-\x209F\x20B6-\x20CF\x20F0-\x20FF\x214F-\x2152\x2185-\x218F\x23E8-\x23FF\x2427-\x243F\x244B-\x245F\x269D-\x269F\x26B3-\x2700\x2705\x270A\x270B\x2728\x274C\x274E\x2753-\x2755\x2757\x275F\x2760\x2795-\x2797\x27B0\x27BF\x27CB-\x27CF\x27EC-\x27EF\x2B1B-\x2B1F\x2B24-\x2BFF\x2C2F\x2C5F\x2C6D-\x2C73\x2C78-\x2C7F\x2CEB-\x2CF8\x2D26-\x2D2F\x2D66-\x2D6E\x2D70-\x2D7F\x2D97-\x2D9F\x2DA7\x2DAF\x2DB7\x2DBF\x2DC7\x2DCF\x2DD7\x2DDF-\x2DFF\x2E18-\x2E1B\x2E1E-\x2E7F\x2E9A\x2EF4-\x2EFF\x2FD6-\x2FEF\x2FFC-\x2FFF\x3040\x3097\x3098\x3100-\x3104\x312D-\x3130\x318F\x31B8-\x31BF\x31D0-\x31EF\x321F\x3244-\x324F\x32FF\x4DB6-\x4DBF\x9FBC-\x9FFF\xA48D-\xA48F\xA4C7-\xA6FF\xA71B-\xA71F\xA722-\xA7FF\xA82C-\xA83F\xA878-\xABFF\xD7A4-\xD7FF\xFA2E\xFA2F\xFA6B-\xFA6F\xFADA-\xFAFF\xFB07-\xFB12\xFB18-\xFB1C\xFB37\xFB3D\xFB3F\xFB42\xFB45\xFBB2-\xFBD2\xFD40-\xFD4F\xFD90\xFD91\xFDC8-\xFDEF\xFDFE\xFDFF\xFE1A-\xFE1F\xFE24-\xFE2F\xFE53\xFE67\xFE6C-\xFE6F\xFE75\xFEFD\xFEFE\xFF00\xFFBF-\xFFC1\xFFC8\xFFC9\xFFD0\xFFD1\xFFD8\xFFD9\xFFDD-\xFFDF\xFFE7\xFFEF-\xFFF8\xFFFE\xFFFF\x1000C\x10027\x1003B\x1003E\x1004E\x1004F\x1005E-\x1007F\x100FB-\x100FF\x10103-\x10106\x10134-\x10136\x1018B-\x102FF\x1031F\x10324-\x1032F\x1034B-\x1037F\x1039E\x103C4-\x103C7\x103D6-\x103FF\x1049E\x1049F\x104AA-\x107FF\x10806\x10807\x10809\x10836\x10839-\x1083B\x1083D\x1083E\x10840-\x108FF\x1091A-\x1091E\x10920-\x109FF\x10A04\x10A07-\x10A0B\x10A14\x10A18\x10A34-\x10A37\x10A3B-\x10A3E\x10A48-\x10A4F\x10A59-\x11FFF\x1236F-\x123FF\x12463-\x1246F\x12474-\x1CFFF\x1D0F6-\x1D0FF\x1D127-\x1D129\x1D1DE-\x1D1FF\x1D246-\x1D2FF\x1D357-\x1D35F\x1D372-\x1D3FF\x1D455\x1D49D\x1D4A0\x1D4A1\x1D4A3\x1D4A4\x1D4A7\x1D4A8\x1D4AD\x1D4BA\x1D4BC\x1D4C4\x1D506\x1D50B\x1D50C\x1D515\x1D51D\x1D53A\x1D53F\x1D545\x1D547-\x1D549\x1D551\x1D6A6\x1D6A7\x1D7CC\x1D7CD\x1D800-\x1FFFF\x2A6D7-\x2F7FF\x2FA1E-\xE0000\xE0002-\xE001F\xE0080-\xE00FF\xE01F0-\xEFFFF\xFFFFE\xFFFFF\x10FFFE\x10FFFF]'

/* Character Class Co	= Private_Use */
Private_Use ::= '[\xE000-\xF8FF\xF0000-\xFFFFD\x100000-\x10FFFD]'

/* Character Class Cs	= Surrogate */
Surrogate ::= '[\xD800-\xDFFF]'

/* Character Class L	= Letter */
Letter ::= '[\x41-\x5A\x61-\x7A\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\xFF\x0100-\x02C1\x02C6-\x02D1\x02E0-\x02E4\x02EE\x037A-\x037D\x0386\x0388-\x038A\x038C\x038E-\x03A1\x03A3-\x03CE\x03D0-\x03F5\x03F7-\x0481\x048A-\x0513\x0531-\x0556\x0559\x0561-\x0587\x05D0-\x05EA\x05F0-\x05F2\x0621-\x063A\x0640-\x064A\x066E\x066F\x0671-\x06D3\x06D5\x06E5\x06E6\x06EE\x06EF\x06FA-\x06FC\x06FF\x0710\x0712-\x072F\x074D-\x076D\x0780-\x07A5\x07B1\x07CA-\x07EA\x07F4\x07F5\x07FA\x0904-\x0939\x093D\x0950\x0958-\x0961\x097B-\x097F\x0985-\x098C\x098F\x0990\x0993-\x09A8\x09AA-\x09B0\x09B2\x09B6-\x09B9\x09BD\x09CE\x09DC\x09DD\x09DF-\x09E1\x09F0\x09F1\x0A05-\x0A0A\x0A0F\x0A10\x0A13-\x0A28\x0A2A-\x0A30\x0A32\x0A33\x0A35\x0A36\x0A38\x0A39\x0A59-\x0A5C\x0A5E\x0A72-\x0A74\x0A85-\x0A8D\x0A8F-\x0A91\x0A93-\x0AA8\x0AAA-\x0AB0\x0AB2\x0AB3\x0AB5-\x0AB9\x0ABD\x0AD0\x0AE0\x0AE1\x0B05-\x0B0C\x0B0F\x0B10\x0B13-\x0B28\x0B2A-\x0B30\x0B32\x0B33\x0B35-\x0B39\x0B3D\x0B5C\x0B5D\x0B5F-\x0B61\x0B71\x0B83\x0B85-\x0B8A\x0B8E-\x0B90\x0B92-\x0B95\x0B99\x0B9A\x0B9C\x0B9E\x0B9F\x0BA3\x0BA4\x0BA8-\x0BAA\x0BAE-\x0BB9\x0C05-\x0C0C\x0C0E-\x0C10\x0C12-\x0C28\x0C2A-\x0C33\x0C35-\x0C39\x0C60\x0C61\x0C85-\x0C8C\x0C8E-\x0C90\x0C92-\x0CA8\x0CAA-\x0CB3\x0CB5-\x0CB9\x0CBD\x0CDE\x0CE0\x0CE1\x0D05-\x0D0C\x0D0E-\x0D10\x0D12-\x0D28\x0D2A-\x0D39\x0D60\x0D61\x0D85-\x0D96\x0D9A-\x0DB1\x0DB3-\x0DBB\x0DBD\x0DC0-\x0DC6\x0E01-\x0E30\x0E32\x0E33\x0E40-\x0E46\x0E81\x0E82\x0E84\x0E87\x0E88\x0E8A\x0E8D\x0E94-\x0E97\x0E99-\x0E9F\x0EA1-\x0EA3\x0EA5\x0EA7\x0EAA\x0EAB\x0EAD-\x0EB0\x0EB2\x0EB3\x0EBD\x0EC0-\x0EC4\x0EC6\x0EDC\x0EDD\x0F00\x0F40-\x0F47\x0F49-\x0F6A\x0F88-\x0F8B\x1000-\x1021\x1023-\x1027\x1029\x102A\x1050-\x1055\x10A0-\x10C5\x10D0-\x10FA\x10FC\x1100-\x1159\x115F-\x11A2\x11A8-\x11F9\x1200-\x1248\x124A-\x124D\x1250-\x1256\x1258\x125A-\x125D\x1260-\x1288\x128A-\x128D\x1290-\x12B0\x12B2-\x12B5\x12B8-\x12BE\x12C0\x12C2-\x12C5\x12C8-\x12D6\x12D8-\x1310\x1312-\x1315\x1318-\x135A\x1380-\x138F\x13A0-\x13F4\x1401-\x166C\x166F-\x1676\x1681-\x169A\x16A0-\x16EA\x1700-\x170C\x170E-\x1711\x1720-\x1731\x1740-\x1751\x1760-\x176C\x176E-\x1770\x1780-\x17B3\x17D7\x17DC\x1820-\x1877\x1880-\x18A8\x1900-\x191C\x1950-\x196D\x1970-\x1974\x1980-\x19A9\x19C1-\x19C7\x1A00-\x1A16\x1B05-\x1B33\x1B45-\x1B4B\x1D00-\x1DBF\x1E00-\x1E9B\x1EA0-\x1EF9\x1F00-\x1F15\x1F18-\x1F1D\x1F20-\x1F45\x1F48-\x1F4D\x1F50-\x1F57\x1F59\x1F5B\x1F5D\x1F5F-\x1F7D\x1F80-\x1FB4\x1FB6-\x1FBC\x1FBE\x1FC2-\x1FC4\x1FC6-\x1FCC\x1FD0-\x1FD3\x1FD6-\x1FDB\x1FE0-\x1FEC\x1FF2-\x1FF4\x1FF6-\x1FFC\x2071\x207F\x2090-\x2094\x2102\x2107\x210A-\x2113\x2115\x2119-\x211D\x2124\x2126\x2128\x212A-\x212D\x212F-\x2139\x213C-\x213F\x2145-\x2149\x214E\x2183\x2184\x2C00-\x2C2E\x2C30-\x2C5E\x2C60-\x2C6C\x2C74-\x2C77\x2C80-\x2CE4\x2D00-\x2D25\x2D30-\x2D65\x2D6F\x2D80-\x2D96\x2DA0-\x2DA6\x2DA8-\x2DAE\x2DB0-\x2DB6\x2DB8-\x2DBE\x2DC0-\x2DC6\x2DC8-\x2DCE\x2DD0-\x2DD6\x2DD8-\x2DDE\x3005\x3006\x3031-\x3035\x303B\x303C\x3041-\x3096\x309D-\x309F\x30A1-\x30FA\x30FC-\x30FF\x3105-\x312C\x3131-\x318E\x31A0-\x31B7\x31F0-\x31FF\x3400-\x4DB5\x4E00-\x9FBB\xA000-\xA48C\xA717-\xA71A\xA800\xA801\xA803-\xA805\xA807-\xA80A\xA80C-\xA822\xA840-\xA873\xAC00-\xD7A3\xF900-\xFA2D\xFA30-\xFA6A\xFA70-\xFAD9\xFB00-\xFB06\xFB13-\xFB17\xFB1D\xFB1F-\xFB28\xFB2A-\xFB36\xFB38-\xFB3C\xFB3E\xFB40\xFB41\xFB43\xFB44\xFB46-\xFBB1\xFBD3-\xFD3D\xFD50-\xFD8F\xFD92-\xFDC7\xFDF0-\xFDFB\xFE70-\xFE74\xFE76-\xFEFC\xFF21-\xFF3A\xFF41-\xFF5A\xFF66-\xFFBE\xFFC2-\xFFC7\xFFCA-\xFFCF\xFFD2-\xFFD7\xFFDA-\xFFDC\x10000-\x1000B\x1000D-\x10026\x10028-\x1003A\x1003C\x1003D\x1003F-\x1004D\x10050-\x1005D\x10080-\x100FA\x10300-\x1031E\x10330-\x10340\x10342-\x10349\x10380-\x1039D\x103A0-\x103C3\x103C8-\x103CF\x10400-\x1049D\x10800-\x10805\x10808\x1080A-\x10835\x10837\x10838\x1083C\x1083F\x10900-\x10915\x10A00\x10A10-\x10A13\x10A15-\x10A17\x10A19-\x10A33\x12000-\x1236E\x1D400-\x1D454\x1D456-\x1D49C\x1D49E\x1D49F\x1D4A2\x1D4A5\x1D4A6\x1D4A9-\x1D4AC\x1D4AE-\x1D4B9\x1D4BB\x1D4BD-\x1D4C3\x1D4C5-\x1D505\x1D507-\x1D50A\x1D50D-\x1D514\x1D516-\x1D51C\x1D51E-\x1D539\x1D53B-\x1D53E\x1D540-\x1D544\x1D546\x1D54A-\x1D550\x1D552-\x1D6A5\x1D6A8-\x1D6C0\x1D6C2-\x1D6DA\x1D6DC-\x1D6FA\x1D6FC-\x1D714\x1D716-\x1D734\x1D736-\x1D74E\x1D750-\x1D76E\x1D770-\x1D788\x1D78A-\x1D7A8\x1D7AA-\x1D7C2\x1D7C4-\x1D7CB\x20000-\x2A6D6\x2F800-\x2FA1D]'

LetterAmp ::= '[\x41-\x5A\x61-\x7A\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\xFF\x0100-\x01BA\x01BC-\x01BF\x01C4-\x0293\x0295-\x02AF\x037B-\x037D\x0386\x0388-\x038A\x038C\x038E-\x03A1\x03A3-\x03CE\x03D0-\x03F5\x03F7-\x0481\x048A-\x0513\x0531-\x0556\x0561-\x0587\x10A0-\x10C5\x1D00-\x1D2B\x1D62-\x1D77\x1D79-\x1D9A\x1E00-\x1E9B\x1EA0-\x1EF9\x1F00-\x1F15\x1F18-\x1F1D\x1F20-\x1F45\x1F48-\x1F4D\x1F50-\x1F57\x1F59\x1F5B\x1F5D\x1F5F-\x1F7D\x1F80-\x1FB4\x1FB6-\x1FBC\x1FBE\x1FC2-\x1FC4\x1FC6-\x1FCC\x1FD0-\x1FD3\x1FD6-\x1FDB\x1FE0-\x1FEC\x1FF2-\x1FF4\x1FF6-\x1FFC\x2071\x207F\x2102\x2107\x210A-\x2113\x2115\x2119-\x211D\x2124\x2126\x2128\x212A-\x212D\x212F-\x2134\x2139\x213C-\x213F\x2145-\x2149\x214E\x2183\x2184\x2C00-\x2C2E\x2C30-\x2C5E\x2C60-\x2C6C\x2C74-\x2C77\x2C80-\x2CE4\x2D00-\x2D25\xFB00-\xFB06\xFB13-\xFB17\xFF21-\xFF3A\xFF41-\xFF5A\x10400-\x1044F\x1D400-\x1D454\x1D456-\x1D49C\x1D49E\x1D49F\x1D4A2\x1D4A5\x1D4A6\x1D4A9-\x1D4AC\x1D4AE-\x1D4B9\x1D4BB\x1D4BD-\x1D4C3\x1D4C5-\x1D505\x1D507-\x1D50A\x1D50D-\x1D514\x1D516-\x1D51C\x1D51E-\x1D539\x1D53B-\x1D53E\x1D540-\x1D544\x1D546\x1D54A-\x1D550\x1D552-\x1D6A5\x1D6A8-\x1D6C0\x1D6C2-\x1D6DA\x1D6DC-\x1D6FA\x1D6FC-\x1D714\x1D716-\x1D734\x1D736-\x1D74E\x1D750-\x1D76E\x1D770-\x1D788\x1D78A-\x1D7A8\x1D7AA-\x1D7C2\x1D7C4-\x1D7CB]'

/* Character Class Ll	= Lowercase_Letter */
Lowercase_Letter ::= '[\x61-\x7A\xAA\xB5\xBA\xDF-\xF6\xF8-\xFF\x0101\x0103\x0105\x0107\x0109\x010B\x010D\x010F\x0111\x0113\x0115\x0117\x0119\x011B\x011D\x011F\x0121\x0123\x0125\x0127\x0129\x012B\x012D\x012F\x0131\x0133\x0135\x0137\x0138\x013A\x013C\x013E\x0140\x0142\x0144\x0146\x0148\x0149\x014B\x014D\x014F\x0151\x0153\x0155\x0157\x0159\x015B\x015D\x015F\x0161\x0163\x0165\x0167\x0169\x016B\x016D\x016F\x0171\x0173\x0175\x0177\x017A\x017C\x017E-\x0180\x0183\x0185\x0188\x018C\x018D\x0192\x0195\x0199-\x019B\x019E\x01A1\x01A3\x01A5\x01A8\x01AA\x01AB\x01AD\x01B0\x01B4\x01B6\x01B9\x01BA\x01BD-\x01BF\x01C6\x01C9\x01CC\x01CE\x01D0\x01D2\x01D4\x01D6\x01D8\x01DA\x01DC\x01DD\x01DF\x01E1\x01E3\x01E5\x01E7\x01E9\x01EB\x01ED\x01EF\x01F0\x01F3\x01F5\x01F9\x01FB\x01FD\x01FF\x0201\x0203\x0205\x0207\x0209\x020B\x020D\x020F\x0211\x0213\x0215\x0217\x0219\x021B\x021D\x021F\x0221\x0223\x0225\x0227\x0229\x022B\x022D\x022F\x0231\x0233-\x0239\x023C\x023F\x0240\x0242\x0247\x0249\x024B\x024D\x024F-\x0293\x0295-\x02AF\x037B-\x037D\x0390\x03AC-\x03CE\x03D0\x03D1\x03D5-\x03D7\x03D9\x03DB\x03DD\x03DF\x03E1\x03E3\x03E5\x03E7\x03E9\x03EB\x03ED\x03EF-\x03F3\x03F5\x03F8\x03FB\x03FC\x0430-\x045F\x0461\x0463\x0465\x0467\x0469\x046B\x046D\x046F\x0471\x0473\x0475\x0477\x0479\x047B\x047D\x047F\x0481\x048B\x048D\x048F\x0491\x0493\x0495\x0497\x0499\x049B\x049D\x049F\x04A1\x04A3\x04A5\x04A7\x04A9\x04AB\x04AD\x04AF\x04B1\x04B3\x04B5\x04B7\x04B9\x04BB\x04BD\x04BF\x04C2\x04C4\x04C6\x04C8\x04CA\x04CC\x04CE\x04CF\x04D1\x04D3\x04D5\x04D7\x04D9\x04DB\x04DD\x04DF\x04E1\x04E3\x04E5\x04E7\x04E9\x04EB\x04ED\x04EF\x04F1\x04F3\x04F5\x04F7\x04F9\x04FB\x04FD\x04FF\x0501\x0503\x0505\x0507\x0509\x050B\x050D\x050F\x0511\x0513\x0561-\x0587\x1D00-\x1D2B\x1D62-\x1D77\x1D79-\x1D9A\x1E01\x1E03\x1E05\x1E07\x1E09\x1E0B\x1E0D\x1E0F\x1E11\x1E13\x1E15\x1E17\x1E19\x1E1B\x1E1D\x1E1F\x1E21\x1E23\x1E25\x1E27\x1E29\x1E2B\x1E2D\x1E2F\x1E31\x1E33\x1E35\x1E37\x1E39\x1E3B\x1E3D\x1E3F\x1E41\x1E43\x1E45\x1E47\x1E49\x1E4B\x1E4D\x1E4F\x1E51\x1E53\x1E55\x1E57\x1E59\x1E5B\x1E5D\x1E5F\x1E61\x1E63\x1E65\x1E67\x1E69\x1E6B\x1E6D\x1E6F\x1E71\x1E73\x1E75\x1E77\x1E79\x1E7B\x1E7D\x1E7F\x1E81\x1E83\x1E85\x1E87\x1E89\x1E8B\x1E8D\x1E8F\x1E91\x1E93\x1E95-\x1E9B\x1EA1\x1EA3\x1EA5\x1EA7\x1EA9\x1EAB\x1EAD\x1EAF\x1EB1\x1EB3\x1EB5\x1EB7\x1EB9\x1EBB\x1EBD\x1EBF\x1EC1\x1EC3\x1EC5\x1EC7\x1EC9\x1ECB\x1ECD\x1ECF\x1ED1\x1ED3\x1ED5\x1ED7\x1ED9\x1EDB\x1EDD\x1EDF\x1EE1\x1EE3\x1EE5\x1EE7\x1EE9\x1EEB\x1EED\x1EEF\x1EF1\x1EF3\x1EF5\x1EF7\x1EF9\x1F00-\x1F07\x1F10-\x1F15\x1F20-\x1F27\x1F30-\x1F37\x1F40-\x1F45\x1F50-\x1F57\x1F60-\x1F67\x1F70-\x1F7D\x1F80-\x1F87\x1F90-\x1F97\x1FA0-\x1FA7\x1FB0-\x1FB4\x1FB6\x1FB7\x1FBE\x1FC2-\x1FC4\x1FC6\x1FC7\x1FD0-\x1FD3\x1FD6\x1FD7\x1FE0-\x1FE7\x1FF2-\x1FF4\x1FF6\x1FF7\x2071\x207F\x210A\x210E\x210F\x2113\x212F\x2134\x2139\x213C\x213D\x2146-\x2149\x214E\x2184\x2C30-\x2C5E\x2C61\x2C65\x2C66\x2C68\x2C6A\x2C6C\x2C74\x2C76\x2C77\x2C81\x2C83\x2C85\x2C87\x2C89\x2C8B\x2C8D\x2C8F\x2C91\x2C93\x2C95\x2C97\x2C99\x2C9B\x2C9D\x2C9F\x2CA1\x2CA3\x2CA5\x2CA7\x2CA9\x2CAB\x2CAD\x2CAF\x2CB1\x2CB3\x2CB5\x2CB7\x2CB9\x2CBB\x2CBD\x2CBF\x2CC1\x2CC3\x2CC5\x2CC7\x2CC9\x2CCB\x2CCD\x2CCF\x2CD1\x2CD3\x2CD5\x2CD7\x2CD9\x2CDB\x2CDD\x2CDF\x2CE1\x2CE3\x2CE4\x2D00-\x2D25\xFB00-\xFB06\xFB13-\xFB17\xFF41-\xFF5A\x10428-\x1044F\x1D41A-\x1D433\x1D44E-\x1D454\x1D456-\x1D467\x1D482-\x1D49B\x1D4B6-\x1D4B9\x1D4BB\x1D4BD-\x1D4C3\x1D4C5-\x1D4CF\x1D4EA-\x1D503\x1D51E-\x1D537\x1D552-\x1D56B\x1D586-\x1D59F\x1D5BA-\x1D5D3\x1D5EE-\x1D607\x1D622-\x1D63B\x1D656-\x1D66F\x1D68A-\x1D6A5\x1D6C2-\x1D6DA\x1D6DC-\x1D6E1\x1D6FC-\x1D714\x1D716-\x1D71B\x1D736-\x1D74E\x1D750-\x1D755\x1D770-\x1D788\x1D78A-\x1D78F\x1D7AA-\x1D7C2\x1D7C4-\x1D7C9\x1D7CB]'

/* Character Class Lm	= Modifier_Letter */
Modifier_Letter ::= '[\x02B0-\x02C1\x02C6-\x02D1\x02E0-\x02E4\x02EE\x037A\x0559\x0640\x06E5\x06E6\x07F4\x07F5\x07FA\x0E46\x0EC6\x10FC\x17D7\x1843\x1D2C-\x1D61\x1D78\x1D9B-\x1DBF\x2090-\x2094\x2D6F\x3005\x3031-\x3035\x303B\x309D\x309E\x30FC-\x30FE\xA015\xA717-\xA71A\xFF70\xFF9E\xFF9F]'

/* Character Class Lo	= Other_Letter */
Other_Letter ::= '[\x01BB\x01C0-\x01C3\x0294\x05D0-\x05EA\x05F0-\x05F2\x0621-\x063A\x0641-\x064A\x066E\x066F\x0671-\x06D3\x06D5\x06EE\x06EF\x06FA-\x06FC\x06FF\x0710\x0712-\x072F\x074D-\x076D\x0780-\x07A5\x07B1\x07CA-\x07EA\x0904-\x0939\x093D\x0950\x0958-\x0961\x097B-\x097F\x0985-\x098C\x098F\x0990\x0993-\x09A8\x09AA-\x09B0\x09B2\x09B6-\x09B9\x09BD\x09CE\x09DC\x09DD\x09DF-\x09E1\x09F0\x09F1\x0A05-\x0A0A\x0A0F\x0A10\x0A13-\x0A28\x0A2A-\x0A30\x0A32\x0A33\x0A35\x0A36\x0A38\x0A39\x0A59-\x0A5C\x0A5E\x0A72-\x0A74\x0A85-\x0A8D\x0A8F-\x0A91\x0A93-\x0AA8\x0AAA-\x0AB0\x0AB2\x0AB3\x0AB5-\x0AB9\x0ABD\x0AD0\x0AE0\x0AE1\x0B05-\x0B0C\x0B0F\x0B10\x0B13-\x0B28\x0B2A-\x0B30\x0B32\x0B33\x0B35-\x0B39\x0B3D\x0B5C\x0B5D\x0B5F-\x0B61\x0B71\x0B83\x0B85-\x0B8A\x0B8E-\x0B90\x0B92-\x0B95\x0B99\x0B9A\x0B9C\x0B9E\x0B9F\x0BA3\x0BA4\x0BA8-\x0BAA\x0BAE-\x0BB9\x0C05-\x0C0C\x0C0E-\x0C10\x0C12-\x0C28\x0C2A-\x0C33\x0C35-\x0C39\x0C60\x0C61\x0C85-\x0C8C\x0C8E-\x0C90\x0C92-\x0CA8\x0CAA-\x0CB3\x0CB5-\x0CB9\x0CBD\x0CDE\x0CE0\x0CE1\x0D05-\x0D0C\x0D0E-\x0D10\x0D12-\x0D28\x0D2A-\x0D39\x0D60\x0D61\x0D85-\x0D96\x0D9A-\x0DB1\x0DB3-\x0DBB\x0DBD\x0DC0-\x0DC6\x0E01-\x0E30\x0E32\x0E33\x0E40-\x0E45\x0E81\x0E82\x0E84\x0E87\x0E88\x0E8A\x0E8D\x0E94-\x0E97\x0E99-\x0E9F\x0EA1-\x0EA3\x0EA5\x0EA7\x0EAA\x0EAB\x0EAD-\x0EB0\x0EB2\x0EB3\x0EBD\x0EC0-\x0EC4\x0EDC\x0EDD\x0F00\x0F40-\x0F47\x0F49-\x0F6A\x0F88-\x0F8B\x1000-\x1021\x1023-\x1027\x1029\x102A\x1050-\x1055\x10D0-\x10FA\x1100-\x1159\x115F-\x11A2\x11A8-\x11F9\x1200-\x1248\x124A-\x124D\x1250-\x1256\x1258\x125A-\x125D\x1260-\x1288\x128A-\x128D\x1290-\x12B0\x12B2-\x12B5\x12B8-\x12BE\x12C0\x12C2-\x12C5\x12C8-\x12D6\x12D8-\x1310\x1312-\x1315\x1318-\x135A\x1380-\x138F\x13A0-\x13F4\x1401-\x166C\x166F-\x1676\x1681-\x169A\x16A0-\x16EA\x1700-\x170C\x170E-\x1711\x1720-\x1731\x1740-\x1751\x1760-\x176C\x176E-\x1770\x1780-\x17B3\x17DC\x1820-\x1842\x1844-\x1877\x1880-\x18A8\x1900-\x191C\x1950-\x196D\x1970-\x1974\x1980-\x19A9\x19C1-\x19C7\x1A00-\x1A16\x1B05-\x1B33\x1B45-\x1B4B\x2135-\x2138\x2D30-\x2D65\x2D80-\x2D96\x2DA0-\x2DA6\x2DA8-\x2DAE\x2DB0-\x2DB6\x2DB8-\x2DBE\x2DC0-\x2DC6\x2DC8-\x2DCE\x2DD0-\x2DD6\x2DD8-\x2DDE\x3006\x303C\x3041-\x3096\x309F\x30A1-\x30FA\x30FF\x3105-\x312C\x3131-\x318E\x31A0-\x31B7\x31F0-\x31FF\x3400-\x4DB5\x4E00-\x9FBB\xA000-\xA014\xA016-\xA48C\xA800\xA801\xA803-\xA805\xA807-\xA80A\xA80C-\xA822\xA840-\xA873\xAC00-\xD7A3\xF900-\xFA2D\xFA30-\xFA6A\xFA70-\xFAD9\xFB1D\xFB1F-\xFB28\xFB2A-\xFB36\xFB38-\xFB3C\xFB3E\xFB40\xFB41\xFB43\xFB44\xFB46-\xFBB1\xFBD3-\xFD3D\xFD50-\xFD8F\xFD92-\xFDC7\xFDF0-\xFDFB\xFE70-\xFE74\xFE76-\xFEFC\xFF66-\xFF6F\xFF71-\xFF9D\xFFA0-\xFFBE\xFFC2-\xFFC7\xFFCA-\xFFCF\xFFD2-\xFFD7\xFFDA-\xFFDC\x10000-\x1000B\x1000D-\x10026\x10028-\x1003A\x1003C\x1003D\x1003F-\x1004D\x10050-\x1005D\x10080-\x100FA\x10300-\x1031E\x10330-\x10340\x10342-\x10349\x10380-\x1039D\x103A0-\x103C3\x103C8-\x103CF\x10450-\x1049D\x10800-\x10805\x10808\x1080A-\x10835\x10837\x10838\x1083C\x1083F\x10900-\x10915\x10A00\x10A10-\x10A13\x10A15-\x10A17\x10A19-\x10A33\x12000-\x1236E\x20000-\x2A6D6\x2F800-\x2FA1D]'

/* Character Class Lt	= Titlecase_Letter */
Titlecase_Letter ::= '[\x01C5\x01C8\x01CB\x01F2\x1F88-\x1F8F\x1F98-\x1F9F\x1FA8-\x1FAF\x1FBC\x1FCC\x1FFC]'

/* Character Class Lu	= Uppercase_Letter */
Uppercase_Letter ::= '[\x41-\x5A\xC0-\xD6\xD8-\xDE\x0100\x0102\x0104\x0106\x0108\x010A\x010C\x010E\x0110\x0112\x0114\x0116\x0118\x011A\x011C\x011E\x0120\x0122\x0124\x0126\x0128\x012A\x012C\x012E\x0130\x0132\x0134\x0136\x0139\x013B\x013D\x013F\x0141\x0143\x0145\x0147\x014A\x014C\x014E\x0150\x0152\x0154\x0156\x0158\x015A\x015C\x015E\x0160\x0162\x0164\x0166\x0168\x016A\x016C\x016E\x0170\x0172\x0174\x0176\x0178\x0179\x017B\x017D\x0181\x0182\x0184\x0186\x0187\x0189-\x018B\x018E-\x0191\x0193\x0194\x0196-\x0198\x019C\x019D\x019F\x01A0\x01A2\x01A4\x01A6\x01A7\x01A9\x01AC\x01AE\x01AF\x01B1-\x01B3\x01B5\x01B7\x01B8\x01BC\x01C4\x01C7\x01CA\x01CD\x01CF\x01D1\x01D3\x01D5\x01D7\x01D9\x01DB\x01DE\x01E0\x01E2\x01E4\x01E6\x01E8\x01EA\x01EC\x01EE\x01F1\x01F4\x01F6-\x01F8\x01FA\x01FC\x01FE\x0200\x0202\x0204\x0206\x0208\x020A\x020C\x020E\x0210\x0212\x0214\x0216\x0218\x021A\x021C\x021E\x0220\x0222\x0224\x0226\x0228\x022A\x022C\x022E\x0230\x0232\x023A\x023B\x023D\x023E\x0241\x0243-\x0246\x0248\x024A\x024C\x024E\x0386\x0388-\x038A\x038C\x038E\x038F\x0391-\x03A1\x03A3-\x03AB\x03D2-\x03D4\x03D8\x03DA\x03DC\x03DE\x03E0\x03E2\x03E4\x03E6\x03E8\x03EA\x03EC\x03EE\x03F4\x03F7\x03F9\x03FA\x03FD-\x042F\x0460\x0462\x0464\x0466\x0468\x046A\x046C\x046E\x0470\x0472\x0474\x0476\x0478\x047A\x047C\x047E\x0480\x048A\x048C\x048E\x0490\x0492\x0494\x0496\x0498\x049A\x049C\x049E\x04A0\x04A2\x04A4\x04A6\x04A8\x04AA\x04AC\x04AE\x04B0\x04B2\x04B4\x04B6\x04B8\x04BA\x04BC\x04BE\x04C0\x04C1\x04C3\x04C5\x04C7\x04C9\x04CB\x04CD\x04D0\x04D2\x04D4\x04D6\x04D8\x04DA\x04DC\x04DE\x04E0\x04E2\x04E4\x04E6\x04E8\x04EA\x04EC\x04EE\x04F0\x04F2\x04F4\x04F6\x04F8\x04FA\x04FC\x04FE\x0500\x0502\x0504\x0506\x0508\x050A\x050C\x050E\x0510\x0512\x0531-\x0556\x10A0-\x10C5\x1E00\x1E02\x1E04\x1E06\x1E08\x1E0A\x1E0C\x1E0E\x1E10\x1E12\x1E14\x1E16\x1E18\x1E1A\x1E1C\x1E1E\x1E20\x1E22\x1E24\x1E26\x1E28\x1E2A\x1E2C\x1E2E\x1E30\x1E32\x1E34\x1E36\x1E38\x1E3A\x1E3C\x1E3E\x1E40\x1E42\x1E44\x1E46\x1E48\x1E4A\x1E4C\x1E4E\x1E50\x1E52\x1E54\x1E56\x1E58\x1E5A\x1E5C\x1E5E\x1E60\x1E62\x1E64\x1E66\x1E68\x1E6A\x1E6C\x1E6E\x1E70\x1E72\x1E74\x1E76\x1E78\x1E7A\x1E7C\x1E7E\x1E80\x1E82\x1E84\x1E86\x1E88\x1E8A\x1E8C\x1E8E\x1E90\x1E92\x1E94\x1EA0\x1EA2\x1EA4\x1EA6\x1EA8\x1EAA\x1EAC\x1EAE\x1EB0\x1EB2\x1EB4\x1EB6\x1EB8\x1EBA\x1EBC\x1EBE\x1EC0\x1EC2\x1EC4\x1EC6\x1EC8\x1ECA\x1ECC\x1ECE\x1ED0\x1ED2\x1ED4\x1ED6\x1ED8\x1EDA\x1EDC\x1EDE\x1EE0\x1EE2\x1EE4\x1EE6\x1EE8\x1EEA\x1EEC\x1EEE\x1EF0\x1EF2\x1EF4\x1EF6\x1EF8\x1F08-\x1F0F\x1F18-\x1F1D\x1F28-\x1F2F\x1F38-\x1F3F\x1F48-\x1F4D\x1F59\x1F5B\x1F5D\x1F5F\x1F68-\x1F6F\x1FB8-\x1FBB\x1FC8-\x1FCB\x1FD8-\x1FDB\x1FE8-\x1FEC\x1FF8-\x1FFB\x2102\x2107\x210B-\x210D\x2110-\x2112\x2115\x2119-\x211D\x2124\x2126\x2128\x212A-\x212D\x2130-\x2133\x213E\x213F\x2145\x2183\x2C00-\x2C2E\x2C60\x2C62-\x2C64\x2C67\x2C69\x2C6B\x2C75\x2C80\x2C82\x2C84\x2C86\x2C88\x2C8A\x2C8C\x2C8E\x2C90\x2C92\x2C94\x2C96\x2C98\x2C9A\x2C9C\x2C9E\x2CA0\x2CA2\x2CA4\x2CA6\x2CA8\x2CAA\x2CAC\x2CAE\x2CB0\x2CB2\x2CB4\x2CB6\x2CB8\x2CBA\x2CBC\x2CBE\x2CC0\x2CC2\x2CC4\x2CC6\x2CC8\x2CCA\x2CCC\x2CCE\x2CD0\x2CD2\x2CD4\x2CD6\x2CD8\x2CDA\x2CDC\x2CDE\x2CE0\x2CE2\xFF21-\xFF3A\x10400-\x10427\x1D400-\x1D419\x1D434-\x1D44D\x1D468-\x1D481\x1D49C\x1D49E\x1D49F\x1D4A2\x1D4A5\x1D4A6\x1D4A9-\x1D4AC\x1D4AE-\x1D4B5\x1D4D0-\x1D4E9\x1D504\x1D505\x1D507-\x1D50A\x1D50D-\x1D514\x1D516-\x1D51C\x1D538\x1D539\x1D53B-\x1D53E\x1D540-\x1D544\x1D546\x1D54A-\x1D550\x1D56C-\x1D585\x1D5A0-\x1D5B9\x1D5D4-\x1D5ED\x1D608-\x1D621\x1D63C-\x1D655\x1D670-\x1D689\x1D6A8-\x1D6C0\x1D6E2-\x1D6FA\x1D71C-\x1D734\x1D756-\x1D76E\x1D790-\x1D7A8\x1D7CA]'

/* Character Class M	= Mark */
Mark ::= '[\x0300-\x036F\x0483-\x0486\x0488\x0489\x0591-\x05BD\x05BF\x05C1\x05C2\x05C4\x05C5\x05C7\x0610-\x0615\x064B-\x065E\x0670\x06D6-\x06DC\x06DE-\x06E4\x06E7\x06E8\x06EA-\x06ED\x0711\x0730-\x074A\x07A6-\x07B0\x07EB-\x07F3\x0901-\x0903\x093C\x093E-\x094D\x0951-\x0954\x0962\x0963\x0981-\x0983\x09BC\x09BE-\x09C4\x09C7\x09C8\x09CB-\x09CD\x09D7\x09E2\x09E3\x0A01-\x0A03\x0A3C\x0A3E-\x0A42\x0A47\x0A48\x0A4B-\x0A4D\x0A70\x0A71\x0A81-\x0A83\x0ABC\x0ABE-\x0AC5\x0AC7-\x0AC9\x0ACB-\x0ACD\x0AE2\x0AE3\x0B01-\x0B03\x0B3C\x0B3E-\x0B43\x0B47\x0B48\x0B4B-\x0B4D\x0B56\x0B57\x0B82\x0BBE-\x0BC2\x0BC6-\x0BC8\x0BCA-\x0BCD\x0BD7\x0C01-\x0C03\x0C3E-\x0C44\x0C46-\x0C48\x0C4A-\x0C4D\x0C55\x0C56\x0C82\x0C83\x0CBC\x0CBE-\x0CC4\x0CC6-\x0CC8\x0CCA-\x0CCD\x0CD5\x0CD6\x0CE2\x0CE3\x0D02\x0D03\x0D3E-\x0D43\x0D46-\x0D48\x0D4A-\x0D4D\x0D57\x0D82\x0D83\x0DCA\x0DCF-\x0DD4\x0DD6\x0DD8-\x0DDF\x0DF2\x0DF3\x0E31\x0E34-\x0E3A\x0E47-\x0E4E\x0EB1\x0EB4-\x0EB9\x0EBB\x0EBC\x0EC8-\x0ECD\x0F18\x0F19\x0F35\x0F37\x0F39\x0F3E\x0F3F\x0F71-\x0F84\x0F86\x0F87\x0F90-\x0F97\x0F99-\x0FBC\x0FC6\x102C-\x1032\x1036-\x1039\x1056-\x1059\x135F\x1712-\x1714\x1732-\x1734\x1752\x1753\x1772\x1773\x17B6-\x17D3\x17DD\x180B-\x180D\x18A9\x1920-\x192B\x1930-\x193B\x19B0-\x19C0\x19C8\x19C9\x1A17-\x1A1B\x1B00-\x1B04\x1B34-\x1B44\x1B6B-\x1B73\x1DC0-\x1DCA\x1DFE\x1DFF\x20D0-\x20EF\x302A-\x302F\x3099\x309A\xA802\xA806\xA80B\xA823-\xA827\xFB1E\xFE00-\xFE0F\xFE20-\xFE23\x10A01-\x10A03\x10A05\x10A06\x10A0C-\x10A0F\x10A38-\x10A3A\x10A3F\x1D165-\x1D169\x1D16D-\x1D172\x1D17B-\x1D182\x1D185-\x1D18B\x1D1AA-\x1D1AD\x1D242-\x1D244\xE0100-\xE01EF]'

/* Character Class Mc	= Spacing_Mark */
Spacing_Mark ::= '[\x0903\x093E-\x0940\x0949-\x094C\x0982\x0983\x09BE-\x09C0\x09C7\x09C8\x09CB\x09CC\x09D7\x0A03\x0A3E-\x0A40\x0A83\x0ABE-\x0AC0\x0AC9\x0ACB\x0ACC\x0B02\x0B03\x0B3E\x0B40\x0B47\x0B48\x0B4B\x0B4C\x0B57\x0BBE\x0BBF\x0BC1\x0BC2\x0BC6-\x0BC8\x0BCA-\x0BCC\x0BD7\x0C01-\x0C03\x0C41-\x0C44\x0C82\x0C83\x0CBE\x0CC0-\x0CC4\x0CC7\x0CC8\x0CCA\x0CCB\x0CD5\x0CD6\x0D02\x0D03\x0D3E-\x0D40\x0D46-\x0D48\x0D4A-\x0D4C\x0D57\x0D82\x0D83\x0DCF-\x0DD1\x0DD8-\x0DDF\x0DF2\x0DF3\x0F3E\x0F3F\x0F7F\x102C\x1031\x1038\x1056\x1057\x17B6\x17BE-\x17C5\x17C7\x17C8\x1923-\x1926\x1929-\x192B\x1930\x1931\x1933-\x1938\x19B0-\x19C0\x19C8\x19C9\x1A19-\x1A1B\x1B04\x1B35\x1B3B\x1B3D-\x1B41\x1B43\x1B44\xA802\xA823\xA824\xA827\x1D165\x1D166\x1D16D-\x1D172]'

/* Character Class Me	= Enclosing_Mark */
Enclosing_Mark ::= '[\x0488\x0489\x06DE\x20DD-\x20E0\x20E2-\x20E4]'

/* Character Class Mn	= Nonspacing_Mark */
Nonspacing_Mark ::= '[\x0300-\x036F\x0483-\x0486\x0591-\x05BD\x05BF\x05C1\x05C2\x05C4\x05C5\x05C7\x0610-\x0615\x064B-\x065E\x0670\x06D6-\x06DC\x06DF-\x06E4\x06E7\x06E8\x06EA-\x06ED\x0711\x0730-\x074A\x07A6-\x07B0\x07EB-\x07F3\x0901\x0902\x093C\x0941-\x0948\x094D\x0951-\x0954\x0962\x0963\x0981\x09BC\x09C1-\x09C4\x09CD\x09E2\x09E3\x0A01\x0A02\x0A3C\x0A41\x0A42\x0A47\x0A48\x0A4B-\x0A4D\x0A70\x0A71\x0A81\x0A82\x0ABC\x0AC1-\x0AC5\x0AC7\x0AC8\x0ACD\x0AE2\x0AE3\x0B01\x0B3C\x0B3F\x0B41-\x0B43\x0B4D\x0B56\x0B82\x0BC0\x0BCD\x0C3E-\x0C40\x0C46-\x0C48\x0C4A-\x0C4D\x0C55\x0C56\x0CBC\x0CBF\x0CC6\x0CCC\x0CCD\x0CE2\x0CE3\x0D41-\x0D43\x0D4D\x0DCA\x0DD2-\x0DD4\x0DD6\x0E31\x0E34-\x0E3A\x0E47-\x0E4E\x0EB1\x0EB4-\x0EB9\x0EBB\x0EBC\x0EC8-\x0ECD\x0F18\x0F19\x0F35\x0F37\x0F39\x0F71-\x0F7E\x0F80-\x0F84\x0F86\x0F87\x0F90-\x0F97\x0F99-\x0FBC\x0FC6\x102D-\x1030\x1032\x1036\x1037\x1039\x1058\x1059\x135F\x1712-\x1714\x1732-\x1734\x1752\x1753\x1772\x1773\x17B7-\x17BD\x17C6\x17C9-\x17D3\x17DD\x180B-\x180D\x18A9\x1920-\x1922\x1927\x1928\x1932\x1939-\x193B\x1A17\x1A18\x1B00-\x1B03\x1B34\x1B36-\x1B3A\x1B3C\x1B42\x1B6B-\x1B73\x1DC0-\x1DCA\x1DFE\x1DFF\x20D0-\x20DC\x20E1\x20E5-\x20EF\x302A-\x302F\x3099\x309A\xA806\xA80B\xA825\xA826\xFB1E\xFE00-\xFE0F\xFE20-\xFE23\x10A01-\x10A03\x10A05\x10A06\x10A0C-\x10A0F\x10A38-\x10A3A\x10A3F\x1D167-\x1D169\x1D17B-\x1D182\x1D185-\x1D18B\x1D1AA-\x1D1AD\x1D242-\x1D244\xE0100-\xE01EF]'

/* Character Class N	= Number */
Number ::= '[\x30-\x39\xB2\xB3\xB9\xBC-\xBE\x0660-\x0669\x06F0-\x06F9\x07C0-\x07C9\x0966-\x096F\x09E6-\x09EF\x09F4-\x09F9\x0A66-\x0A6F\x0AE6-\x0AEF\x0B66-\x0B6F\x0BE6-\x0BF2\x0C66-\x0C6F\x0CE6-\x0CEF\x0D66-\x0D6F\x0E50-\x0E59\x0ED0-\x0ED9\x0F20-\x0F33\x1040-\x1049\x1369-\x137C\x16EE-\x16F0\x17E0-\x17E9\x17F0-\x17F9\x1810-\x1819\x1946-\x194F\x19D0-\x19D9\x1B50-\x1B59\x2070\x2074-\x2079\x2080-\x2089\x2153-\x2182\x2460-\x249B\x24EA-\x24FF\x2776-\x2793\x2CFD\x3007\x3021-\x3029\x3038-\x303A\x3192-\x3195\x3220-\x3229\x3251-\x325F\x3280-\x3289\x32B1-\x32BF\xFF10-\xFF19\x10107-\x10133\x10140-\x10178\x1018A\x10320-\x10323\x10341\x1034A\x103D1-\x103D5\x104A0-\x104A9\x10916-\x10919\x10A40-\x10A47\x12400-\x12462\x1D360-\x1D371\x1D7CE-\x1D7FF]'

/* Character Class Nd	= Decimal_Number */
Decimal_Number ::= '[\x30-\x39\x0660-\x0669\x06F0-\x06F9\x07C0-\x07C9\x0966-\x096F\x09E6-\x09EF\x0A66-\x0A6F\x0AE6-\x0AEF\x0B66-\x0B6F\x0BE6-\x0BEF\x0C66-\x0C6F\x0CE6-\x0CEF\x0D66-\x0D6F\x0E50-\x0E59\x0ED0-\x0ED9\x0F20-\x0F29\x1040-\x1049\x17E0-\x17E9\x1810-\x1819\x1946-\x194F\x19D0-\x19D9\x1B50-\x1B59\xFF10-\xFF19\x104A0-\x104A9\x1D7CE-\x1D7FF]'

/* Character Class Nl	= Letter_Number */
Letter_Number ::= '[\x16EE-\x16F0\x2160-\x2182\x3007\x3021-\x3029\x3038-\x303A\x10140-\x10174\x10341\x1034A\x103D1-\x103D5\x12400-\x12462]'

/* Character Class No	= Other_Number */
Other_Number ::= '[\xB2\xB3\xB9\xBC-\xBE\x09F4-\x09F9\x0BF0-\x0BF2\x0F2A-\x0F33\x1369-\x137C\x17F0-\x17F9\x2070\x2074-\x2079\x2080-\x2089\x2153-\x215F\x2460-\x249B\x24EA-\x24FF\x2776-\x2793\x2CFD\x3192-\x3195\x3220-\x3229\x3251-\x325F\x3280-\x3289\x32B1-\x32BF\x10107-\x10133\x10175-\x10178\x1018A\x10320-\x10323\x10916-\x10919\x10A40-\x10A47\x1D360-\x1D371]'

/* Character Class P	= Punctuation */
Punctuation ::= '[\x21-\x23\x25-\x2A\x2C-\x2F\x3A\x3B\x3F\x40\x5B-\x5D\x5F\x7B\x7D\xA1\xAB\xB7\xBB\xBF\x037E\x0387\x055A-\x055F\x0589\x058A\x05BE\x05C0\x05C3\x05C6\x05F3\x05F4\x060C\x060D\x061B\x061E\x061F\x066A-\x066D\x06D4\x0700-\x070D\x07F7-\x07F9\x0964\x0965\x0970\x0DF4\x0E4F\x0E5A\x0E5B\x0F04-\x0F12\x0F3A-\x0F3D\x0F85\x0FD0\x0FD1\x104A-\x104F\x10FB\x1361-\x1368\x166D\x166E\x169B\x169C\x16EB-\x16ED\x1735\x1736\x17D4-\x17D6\x17D8-\x17DA\x1800-\x180A\x1944\x1945\x19DE\x19DF\x1A1E\x1A1F\x1B5A-\x1B60\x2010-\x2027\x2030-\x2043\x2045-\x2051\x2053-\x205E\x207D\x207E\x208D\x208E\x2329\x232A\x2768-\x2775\x27C5\x27C6\x27E6-\x27EB\x2983-\x2998\x29D8-\x29DB\x29FC\x29FD\x2CF9-\x2CFC\x2CFE\x2CFF\x2E00-\x2E17\x2E1C\x2E1D\x3001-\x3003\x3008-\x3011\x3014-\x301F\x3030\x303D\x30A0\x30FB\xA874-\xA877\xFD3E\xFD3F\xFE10-\xFE19\xFE30-\xFE52\xFE54-\xFE61\xFE63\xFE68\xFE6A\xFE6B\xFF01-\xFF03\xFF05-\xFF0A\xFF0C-\xFF0F\xFF1A\xFF1B\xFF1F\xFF20\xFF3B-\xFF3D\xFF3F\xFF5B\xFF5D\xFF5F-\xFF65\x10100\x10101\x1039F\x103D0\x1091F\x10A50-\x10A58\x12470-\x12473]'

/* Character Class Pc	= Connector_Punctuation */
Connector_Punctuation ::= '[\x5F\x203F\x2040\x2054\xFE33\xFE34\xFE4D-\xFE4F\xFF3F]'

/* Character Class Pd	= Dash_Punctuation */
Dash_Punctuation ::= '[\x2D\x058A\x1806\x2010-\x2015\x2E17\x301C\x3030\x30A0\xFE31\xFE32\xFE58\xFE63\xFF0D]'

/* Character Class Pe	= Close_Punctuation */
Close_Punctuation ::= '[\x29\x5D\x7D\x0F3B\x0F3D\x169C\x2046\x207E\x208E\x232A\x2769\x276B\x276D\x276F\x2771\x2773\x2775\x27C6\x27E7\x27E9\x27EB\x2984\x2986\x2988\x298A\x298C\x298E\x2990\x2992\x2994\x2996\x2998\x29D9\x29DB\x29FD\x3009\x300B\x300D\x300F\x3011\x3015\x3017\x3019\x301B\x301E\x301F\xFD3F\xFE18\xFE36\xFE38\xFE3A\xFE3C\xFE3E\xFE40\xFE42\xFE44\xFE48\xFE5A\xFE5C\xFE5E\xFF09\xFF3D\xFF5D\xFF60\xFF63]'

/* Character Class Pf	= Final_Punctuation */
Final_Punctuation ::= '[\xBB\x2019\x201D\x203A\x2E03\x2E05\x2E0A\x2E0D\x2E1D]'

/* Character Class Pi	= Initial_Punctuation */
Initial_Punctuation ::= '[\xAB\x2018\x201B\x201C\x201F\x2039\x2E02\x2E04\x2E09\x2E0C\x2E1C]'

/* Character Class Po	= Other_Punctuation */
Other_Punctuation ::= '[\x21-\x23\x25-\x27\x2A\x2C\x2E\x2F\x3A\x3B\x3F\x40\x5C\xA1\xB7\xBF\x037E\x0387\x055A-\x055F\x0589\x05BE\x05C0\x05C3\x05C6\x05F3\x05F4\x060C\x060D\x061B\x061E\x061F\x066A-\x066D\x06D4\x0700-\x070D\x07F7-\x07F9\x0964\x0965\x0970\x0DF4\x0E4F\x0E5A\x0E5B\x0F04-\x0F12\x0F85\x0FD0\x0FD1\x104A-\x104F\x10FB\x1361-\x1368\x166D\x166E\x16EB-\x16ED\x1735\x1736\x17D4-\x17D6\x17D8-\x17DA\x1800-\x1805\x1807-\x180A\x1944\x1945\x19DE\x19DF\x1A1E\x1A1F\x1B5A-\x1B60\x2016\x2017\x2020-\x2027\x2030-\x2038\x203B-\x203E\x2041-\x2043\x2047-\x2051\x2053\x2055-\x205E\x2CF9-\x2CFC\x2CFE\x2CFF\x2E00\x2E01\x2E06-\x2E08\x2E0B\x2E0E-\x2E16\x3001-\x3003\x303D\x30FB\xA874-\xA877\xFE10-\xFE16\xFE19\xFE30\xFE45\xFE46\xFE49-\xFE4C\xFE50-\xFE52\xFE54-\xFE57\xFE5F-\xFE61\xFE68\xFE6A\xFE6B\xFF01-\xFF03\xFF05-\xFF07\xFF0A\xFF0C\xFF0E\xFF0F\xFF1A\xFF1B\xFF1F\xFF20\xFF3C\xFF61\xFF64\xFF65\x10100\x10101\x1039F\x103D0\x1091F\x10A50-\x10A58\x12470-\x12473]'

/* Character Class Ps	= Open_Punctuation */
Open_Punctuation ::= '[\x28\x5B\x7B\x0F3A\x0F3C\x169B\x201A\x201E\x2045\x207D\x208D\x2329\x2768\x276A\x276C\x276E\x2770\x2772\x2774\x27C5\x27E6\x27E8\x27EA\x2983\x2985\x2987\x2989\x298B\x298D\x298F\x2991\x2993\x2995\x2997\x29D8\x29DA\x29FC\x3008\x300A\x300C\x300E\x3010\x3014\x3016\x3018\x301A\x301D\xFD3E\xFE17\xFE35\xFE37\xFE39\xFE3B\xFE3D\xFE3F\xFE41\xFE43\xFE47\xFE59\xFE5B\xFE5D\xFF08\xFF3B\xFF5B\xFF5F\xFF62]'

/* Character Class S	= Symbol */
Symbol ::= '[\x24\x2B\x3C-\x3E\x5E\x60\x7C\x7E\xA2-\xA9\xAC\xAE-\xB1\xB4\xB6\xB8\xD7\xF7\x02C2-\x02C5\x02D2-\x02DF\x02E5-\x02ED\x02EF-\x02FF\x0374\x0375\x0384\x0385\x03F6\x0482\x060B\x060E\x060F\x06E9\x06FD\x06FE\x07F6\x09F2\x09F3\x09FA\x0AF1\x0B70\x0BF3-\x0BFA\x0CF1\x0CF2\x0E3F\x0F01-\x0F03\x0F13-\x0F17\x0F1A-\x0F1F\x0F34\x0F36\x0F38\x0FBE-\x0FC5\x0FC7-\x0FCC\x0FCF\x1360\x1390-\x1399\x17DB\x1940\x19E0-\x19FF\x1B61-\x1B6A\x1B74-\x1B7C\x1FBD\x1FBF-\x1FC1\x1FCD-\x1FCF\x1FDD-\x1FDF\x1FED-\x1FEF\x1FFD\x1FFE\x2044\x2052\x207A-\x207C\x208A-\x208C\x20A0-\x20B5\x2100\x2101\x2103-\x2106\x2108\x2109\x2114\x2116-\x2118\x211E-\x2123\x2125\x2127\x2129\x212E\x213A\x213B\x2140-\x2144\x214A-\x214D\x2190-\x2328\x232B-\x23E7\x2400-\x2426\x2440-\x244A\x249C-\x24E9\x2500-\x269C\x26A0-\x26B2\x2701-\x2704\x2706-\x2709\x270C-\x2727\x2729-\x274B\x274D\x274F-\x2752\x2756\x2758-\x275E\x2761-\x2767\x2794\x2798-\x27AF\x27B1-\x27BE\x27C0-\x27C4\x27C7-\x27CA\x27D0-\x27E5\x27F0-\x2982\x2999-\x29D7\x29DC-\x29FB\x29FE-\x2B1A\x2B20-\x2B23\x2CE5-\x2CEA\x2E80-\x2E99\x2E9B-\x2EF3\x2F00-\x2FD5\x2FF0-\x2FFB\x3004\x3012\x3013\x3020\x3036\x3037\x303E\x303F\x309B\x309C\x3190\x3191\x3196-\x319F\x31C0-\x31CF\x3200-\x321E\x322A-\x3243\x3250\x3260-\x327F\x328A-\x32B0\x32C0-\x32FE\x3300-\x33FF\x4DC0-\x4DFF\xA490-\xA4C6\xA700-\xA716\xA720\xA721\xA828-\xA82B\xFB29\xFDFC\xFDFD\xFE62\xFE64-\xFE66\xFE69\xFF04\xFF0B\xFF1C-\xFF1E\xFF3E\xFF40\xFF5C\xFF5E\xFFE0-\xFFE6\xFFE8-\xFFEE\xFFFC\xFFFD\x10102\x10137-\x1013F\x10179-\x10189\x1D000-\x1D0F5\x1D100-\x1D126\x1D12A-\x1D164\x1D16A-\x1D16C\x1D183\x1D184\x1D18C-\x1D1A9\x1D1AE-\x1D1DD\x1D200-\x1D241\x1D245\x1D300-\x1D356\x1D6C1\x1D6DB\x1D6FB\x1D715\x1D735\x1D74F\x1D76F\x1D789\x1D7A9\x1D7C3]'

/* Character Class Sc	= Currency_Symbol */
Currency_Symbol ::= '[\x24\xA2-\xA5\x060B\x09F2\x09F3\x0AF1\x0BF9\x0E3F\x17DB\x20A0-\x20B5\xFDFC\xFE69\xFF04\xFFE0\xFFE1\xFFE5\xFFE6]'

/* Character Class Sk	= Modifier_Symbol */
Modifier_Symbol ::= '[\x5E\x60\xA8\xAF\xB4\xB8\x02C2-\x02C5\x02D2-\x02DF\x02E5-\x02ED\x02EF-\x02FF\x0374\x0375\x0384\x0385\x1FBD\x1FBF-\x1FC1\x1FCD-\x1FCF\x1FDD-\x1FDF\x1FED-\x1FEF\x1FFD\x1FFE\x309B\x309C\xA700-\xA716\xA720\xA721\xFF3E\xFF40\xFFE3]'

/* Character Class Sm	= Math_Symbol */
Math_Symbol ::= '[\x2B\x3C-\x3E\x7C\x7E\xAC\xB1\xD7\xF7\x03F6\x2044\x2052\x207A-\x207C\x208A-\x208C\x2140-\x2144\x214B\x2190-\x2194\x219A\x219B\x21A0\x21A3\x21A6\x21AE\x21CE\x21CF\x21D2\x21D4\x21F4-\x22FF\x2308-\x230B\x2320\x2321\x237C\x239B-\x23B3\x23DC-\x23E1\x25B7\x25C1\x25F8-\x25FF\x266F\x27C0-\x27C4\x27C7-\x27CA\x27D0-\x27E5\x27F0-\x27FF\x2900-\x2982\x2999-\x29D7\x29DC-\x29FB\x29FE-\x2AFF\xFB29\xFE62\xFE64-\xFE66\xFF0B\xFF1C-\xFF1E\xFF5C\xFF5E\xFFE2\xFFE9-\xFFEC\x1D6C1\x1D6DB\x1D6FB\x1D715\x1D735\x1D74F\x1D76F\x1D789\x1D7A9\x1D7C3]'

/* Character Class So	= Other_Symbol */
Other_Symbol ::= '[\xA6\xA7\xA9\xAE\xB0\xB6\x0482\x060E\x060F\x06E9\x06FD\x06FE\x07F6\x09FA\x0B70\x0BF3-\x0BF8\x0BFA\x0CF1\x0CF2\x0F01-\x0F03\x0F13-\x0F17\x0F1A-\x0F1F\x0F34\x0F36\x0F38\x0FBE-\x0FC5\x0FC7-\x0FCC\x0FCF\x1360\x1390-\x1399\x1940\x19E0-\x19FF\x1B61-\x1B6A\x1B74-\x1B7C\x2100\x2101\x2103-\x2106\x2108\x2109\x2114\x2116-\x2118\x211E-\x2123\x2125\x2127\x2129\x212E\x213A\x213B\x214A\x214C\x214D\x2195-\x2199\x219C-\x219F\x21A1\x21A2\x21A4\x21A5\x21A7-\x21AD\x21AF-\x21CD\x21D0\x21D1\x21D3\x21D5-\x21F3\x2300-\x2307\x230C-\x231F\x2322-\x2328\x232B-\x237B\x237D-\x239A\x23B4-\x23DB\x23E2-\x23E7\x2400-\x2426\x2440-\x244A\x249C-\x24E9\x2500-\x25B6\x25B8-\x25C0\x25C2-\x25F7\x2600-\x266E\x2670-\x269C\x26A0-\x26B2\x2701-\x2704\x2706-\x2709\x270C-\x2727\x2729-\x274B\x274D\x274F-\x2752\x2756\x2758-\x275E\x2761-\x2767\x2794\x2798-\x27AF\x27B1-\x27BE\x2800-\x28FF\x2B00-\x2B1A\x2B20-\x2B23\x2CE5-\x2CEA\x2E80-\x2E99\x2E9B-\x2EF3\x2F00-\x2FD5\x2FF0-\x2FFB\x3004\x3012\x3013\x3020\x3036\x3037\x303E\x303F\x3190\x3191\x3196-\x319F\x31C0-\x31CF\x3200-\x321E\x322A-\x3243\x3250\x3260-\x327F\x328A-\x32B0\x32C0-\x32FE\x3300-\x33FF\x4DC0-\x4DFF\xA490-\xA4C6\xA828-\xA82B\xFDFD\xFFE4\xFFE8\xFFED\xFFEE\xFFFC\xFFFD\x10102\x10137-\x1013F\x10179-\x10189\x1D000-\x1D0F5\x1D100-\x1D126\x1D12A-\x1D164\x1D16A-\x1D16C\x1D183\x1D184\x1D18C-\x1D1A9\x1D1AE-\x1D1DD\x1D200-\x1D241\x1D245\x1D300-\x1D356]'

/* Character Class Z	= Separator */
Separator ::= '[\x20\xA0\x1680\x180E\x2000-\x200A\x2028\x2029\x202F\x205F\x3000]'

/* Character Class Zl	= Line_Separator */
Line_Separator ::= '[\x2028]'

/* Character Class Zp	= Paragraph_Separator */
Paragraph_Separator ::= '[\x2029]'

/* Character Class Zs	= Space_Separator */
Space_Separator ::= '[\x20\xA0\x1680\x180E\x2000-\x200A\x202F\x205F\x3000]'