diff --git a/python/gen/com/jetbrains/python/lexer/_PythonLexer.java b/python/gen/com/jetbrains/python/lexer/_PythonLexer.java index 92620e8838f0..c22f0efbd63b 100644 --- a/python/gen/com/jetbrains/python/lexer/_PythonLexer.java +++ b/python/gen/com/jetbrains/python/lexer/_PythonLexer.java @@ -4,10 +4,8 @@ package com.jetbrains.python.lexer; import com.intellij.psi.tree.IElementType; -import com.intellij.util.containers.ContainerUtil;import com.jetbrains.python.PyTokenTypes; -import com.intellij.util.containers.Stack; +import com.jetbrains.python.PyTokenTypes; import com.intellij.openapi.util.text.StringUtil; -import com.jetbrains.python.psi.PyStringLiteralUtil; /** @@ -124,10 +122,10 @@ class _PythonLexer implements FlexLexerEx { /* The ZZ_CMAP_A table has 3424 entries */ static final char ZZ_CMAP_A[] = zzUnpackCMap( - "\11\0\1\43\1\45\1\112\1\44\1\14\22\0\1\42\1\33\1\27\1\13\1\0\1\101\1\102\1"+ - "\25\1\35\1\36\1\76\1\75\1\110\1\21\1\17\1\100\1\1\1\5\6\3\2\2\1\41\1\46\1"+ + "\11\0\1\44\1\35\1\112\1\45\1\14\22\0\1\43\1\33\1\27\1\13\1\0\1\101\1\102\1"+ + "\25\1\36\1\37\1\76\1\75\1\110\1\21\1\17\1\100\1\1\1\5\6\3\2\2\1\42\1\46\1"+ "\106\1\34\1\105\1\0\1\77\1\4\1\11\1\23\1\4\1\20\1\30\3\15\1\22\1\15\1\12\2"+ - "\15\1\10\2\15\1\24\2\15\1\24\2\15\1\6\2\15\1\37\1\26\1\40\1\104\1\7\1\111"+ + "\15\1\10\2\15\1\24\2\15\1\24\2\15\1\6\2\15\1\40\1\26\1\41\1\104\1\7\1\111"+ "\1\47\1\56\1\60\1\51\1\53\1\65\1\72\1\74\1\63\1\22\1\57\1\61\1\71\1\50\1\62"+ "\1\67\1\15\1\54\1\52\1\55\1\64\1\15\1\73\1\66\1\70\1\15\1\31\1\103\1\32\1"+ "\107\6\0\1\112\24\0\1\15\12\0\1\15\4\0\1\15\5\0\27\15\1\0\12\15\4\0\14\15"+ @@ -192,31 +190,31 @@ class _PythonLexer implements FlexLexerEx { "\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24"+ "\1\25\20\3\1\26\1\27\1\30\1\31\1\32\1\33"+ "\1\34\1\35\1\36\1\37\1\40\1\41\1\42\2\43"+ - "\1\44\2\45\1\46\1\3\2\47\1\20\3\3\2\50"+ - "\1\51\1\10\1\51\1\52\1\3\2\53\1\54\1\55"+ - "\1\56\1\57\1\60\1\61\1\62\1\63\3\3\2\50"+ - "\1\10\1\52\1\64\1\2\5\0\1\2\1\65\1\0"+ - "\1\66\1\0\1\3\1\65\1\67\1\70\3\7\1\71"+ - "\3\7\1\3\2\72\1\73\1\74\15\3\1\75\1\76"+ - "\1\77\1\100\10\3\1\101\1\102\1\103\1\104\1\105"+ + "\1\44\2\45\1\46\1\3\2\47\1\21\3\3\2\50"+ + "\1\51\1\10\1\51\1\52\1\53\1\3\2\54\1\55"+ + "\1\56\1\57\1\60\1\61\1\62\1\63\1\64\1\65"+ + "\3\3\2\50\1\10\1\52\1\66\1\2\5\0\1\2"+ + "\1\67\1\0\1\70\1\0\1\3\1\67\1\71\1\72"+ + "\3\7\1\73\3\7\1\3\2\74\1\75\1\76\15\3"+ + "\1\77\1\100\1\101\1\102\10\3\1\103\1\104\1\105"+ "\1\106\1\107\1\110\1\111\1\112\1\113\1\114\1\115"+ - "\1\116\1\117\1\0\3\45\1\120\3\45\1\3\6\47"+ - "\2\0\1\121\1\3\2\0\2\44\2\51\1\3\7\53"+ - "\1\56\1\3\1\0\1\44\1\0\1\2\1\0\1\2"+ - "\1\0\1\2\1\0\1\65\1\0\1\3\1\0\1\7"+ - "\1\122\1\123\1\0\1\122\1\3\2\0\1\124\1\3"+ - "\1\125\1\126\1\127\5\3\1\130\6\3\1\131\5\3"+ - "\1\132\1\133\1\134\1\135\1\0\1\45\1\136\1\137"+ - "\1\0\1\136\1\3\1\47\2\140\1\51\1\3\2\53"+ - "\1\141\1\0\2\142\1\0\1\3\1\72\1\3\1\143"+ - "\1\144\10\3\1\145\1\3\1\146\3\3\1\0\2\137"+ - "\13\0\2\3\1\147\1\3\1\150\1\151\4\3\1\152"+ - "\1\3\1\153\7\0\1\122\1\154\1\155\1\156\1\3"+ - "\1\157\1\160\1\3\1\161\1\136\1\140\1\141\1\142"+ - "\1\0\1\162\1\3\1\163\1\164"; + "\1\116\1\117\1\120\1\121\1\0\3\45\1\122\3\45"+ + "\1\3\6\47\1\0\1\123\1\0\1\3\2\0\2\44"+ + "\2\51\1\3\7\54\1\57\1\3\1\0\1\44\1\0"+ + "\1\2\1\0\1\2\1\0\1\2\1\0\1\67\1\0"+ + "\1\3\1\0\1\7\1\124\1\125\1\0\1\124\1\3"+ + "\2\0\1\126\1\3\1\127\1\130\1\131\5\3\1\132"+ + "\6\3\1\133\5\3\1\134\1\135\1\136\1\137\1\0"+ + "\1\45\1\140\1\141\1\0\1\140\1\3\1\47\2\142"+ + "\1\51\1\3\2\54\1\143\1\0\2\144\1\0\1\3"+ + "\1\74\1\3\1\145\1\146\10\3\1\147\1\3\1\150"+ + "\3\3\1\0\2\141\13\0\2\3\1\151\1\3\1\152"+ + "\1\153\4\3\1\154\1\3\1\155\7\0\1\124\1\156"+ + "\1\157\1\160\1\3\1\161\1\162\1\3\1\163\1\140"+ + "\1\142\1\143\1\144\1\164\1\0\1\3\1\165\1\166"; private static int [] zzUnpackAction() { - int [] result = new int[339]; + int [] result = new int[341]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -251,42 +249,42 @@ class _PythonLexer implements FlexLexerEx { "\0\u0c99\0\u0ce4\0\u01c2\0\u01c2\0\u01c2\0\u01c2\0\u0d2f\0\u0d7a"+ "\0\u0dc5\0\u0e10\0\u01c2\0\u0e5b\0\u0ea6\0\u0ef1\0\u0f3c\0\u0f87"+ "\0\u0fd2\0\u101d\0\u1068\0\u10b3\0\u10fe\0\u1149\0\u1194\0\u11df"+ - "\0\u122a\0\u1275\0\u12c0\0\u01c2\0\u01c2\0\u130b\0\u01c2\0\u01c2"+ - "\0\u01c2\0\u01c2\0\u01c2\0\u1356\0\u13a1\0\u13ec\0\u1437\0\u1482"+ - "\0\u14cd\0\u01c2\0\u01c2\0\u1518\0\u1563\0\u15ae\0\u15f9\0\u1644"+ - "\0\u168f\0\u01c2\0\u16da\0\u1725\0\u01c2\0\u1770\0\u17bb\0\u1806"+ - "\0\u01c2\0\u01c2\0\u1851\0\u189c\0\u18e7\0\u01c2\0\u1932\0\u197d"+ - "\0\u19c8\0\u1a13\0\u1a5e\0\u1aa9\0\u01c2\0\u01c2\0\u1af4\0\u1b3f"+ - "\0\u1b8a\0\u1bd5\0\u1c20\0\u1c6b\0\u1cb6\0\u1d01\0\u1d4c\0\u1d97"+ - "\0\u1de2\0\u1e2d\0\u1e78\0\u02a3\0\u02a3\0\u02a3\0\u02a3\0\u1ec3"+ - "\0\u1f0e\0\u1f59\0\u1fa4\0\u1fef\0\u203a\0\u2085\0\u20d0\0\u01c2"+ - "\0\u01c2\0\u211b\0\u01c2\0\u01c2\0\u2166\0\u01c2\0\u01c2\0\u01c2"+ - "\0\u01c2\0\u01c2\0\u21b1\0\u01c2\0\u01c2\0\u21fc\0\u2247\0\u2292"+ - "\0\u22dd\0\u2328\0\u01c2\0\u2373\0\u23be\0\u2409\0\u2454\0\u249f"+ - "\0\u24ea\0\u2535\0\u2580\0\u25cb\0\u2616\0\u2661\0\u0f3c\0\u01c2"+ - "\0\u26ac\0\u1149\0\u11df\0\u26f7\0\u2742\0\u278d\0\u27d8\0\u2823"+ - "\0\u286e\0\u28b9\0\u24ea\0\u2904\0\u294f\0\u299a\0\u29e5\0\u2a30"+ - "\0\u2a7b\0\u14cd\0\u2ac6\0\u2b11\0\u2b5c\0\u2ba7\0\u2bf2\0\u2c3d"+ - "\0\u2c88\0\u2cd3\0\u2d1e\0\u2d69\0\u2db4\0\u0384\0\u2dff\0\u2e4a"+ - "\0\u01c2\0\u2dff\0\u2e95\0\u2ee0\0\u2f2b\0\u2f76\0\u02a3\0\u2fc1"+ - "\0\u02a3\0\u02a3\0\u02a3\0\u300c\0\u3057\0\u30a2\0\u30ed\0\u3138"+ - "\0\u02a3\0\u3183\0\u31ce\0\u3219\0\u3264\0\u32af\0\u32fa\0\u02a3"+ - "\0\u3345\0\u3390\0\u33db\0\u3426\0\u3471\0\u01c2\0\u01c2\0\u01c2"+ - "\0\u01c2\0\u34bc\0\u3507\0\u3552\0\u01c2\0\u3507\0\u359d\0\u35e8"+ - "\0\u01c2\0\u3633\0\u367e\0\u01c2\0\u36c9\0\u2616\0\u01c2\0\u3714"+ - "\0\u375f\0\u37aa\0\u37f5\0\u3840\0\u388b\0\u01c2\0\u38d6\0\u02a3"+ - "\0\u02a3\0\u3921\0\u396c\0\u39b7\0\u3a02\0\u3a4d\0\u3a98\0\u3ae3"+ - "\0\u3b2e\0\u02a3\0\u3b79\0\u02a3\0\u3bc4\0\u3c0f\0\u3c5a\0\u3ca5"+ - "\0\u3cf0\0\u3d3b\0\u3d86\0\u3dd1\0\u3e1c\0\u3e67\0\u3eb2\0\u3efd"+ - "\0\u3f48\0\u3f93\0\u37aa\0\u37f5\0\u3fde\0\u4029\0\u4074\0\u02a3"+ - "\0\u40bf\0\u02a3\0\u02a3\0\u410a\0\u4155\0\u41a0\0\u41eb\0\u02a3"+ - "\0\u4236\0\u02a3\0\u4281\0\u3cf0\0\u3d3b\0\u42cc\0\u4317\0\u4362"+ - "\0\u43ad\0\u43f8\0\u02a3\0\u02a3\0\u02a3\0\u4443\0\u02a3\0\u02a3"+ - "\0\u448e\0\u02a3\0\u3507\0\u01c2\0\u01c2\0\u01c2\0\u43f8\0\u01c2"+ - "\0\u44d9\0\u02a3\0\u02a3"; + "\0\u01c2\0\u122a\0\u1275\0\u12c0\0\u01c2\0\u01c2\0\u130b\0\u01c2"+ + "\0\u01c2\0\u01c2\0\u01c2\0\u01c2\0\u01c2\0\u1356\0\u13a1\0\u13ec"+ + "\0\u1437\0\u1482\0\u14cd\0\u01c2\0\u01c2\0\u1518\0\u1563\0\u15ae"+ + "\0\u15f9\0\u1644\0\u168f\0\u01c2\0\u16da\0\u1725\0\u01c2\0\u1770"+ + "\0\u17bb\0\u1806\0\u01c2\0\u01c2\0\u1851\0\u189c\0\u18e7\0\u01c2"+ + "\0\u1932\0\u197d\0\u19c8\0\u1a13\0\u1a5e\0\u1aa9\0\u01c2\0\u01c2"+ + "\0\u1af4\0\u1b3f\0\u1b8a\0\u1bd5\0\u1c20\0\u1c6b\0\u1cb6\0\u1d01"+ + "\0\u1d4c\0\u1d97\0\u1de2\0\u1e2d\0\u1e78\0\u02a3\0\u02a3\0\u02a3"+ + "\0\u02a3\0\u1ec3\0\u1f0e\0\u1f59\0\u1fa4\0\u1fef\0\u203a\0\u2085"+ + "\0\u20d0\0\u01c2\0\u01c2\0\u211b\0\u01c2\0\u01c2\0\u2166\0\u01c2"+ + "\0\u01c2\0\u01c2\0\u01c2\0\u01c2\0\u21b1\0\u01c2\0\u01c2\0\u21fc"+ + "\0\u2247\0\u2292\0\u22dd\0\u2328\0\u01c2\0\u2373\0\u23be\0\u2409"+ + "\0\u2454\0\u249f\0\u24ea\0\u2535\0\u2580\0\u25cb\0\u2616\0\u2661"+ + "\0\u01c2\0\u0f3c\0\u26ac\0\u1149\0\u11df\0\u26f7\0\u2742\0\u278d"+ + "\0\u27d8\0\u2823\0\u286e\0\u28b9\0\u24ea\0\u2904\0\u294f\0\u299a"+ + "\0\u29e5\0\u2a30\0\u2a7b\0\u14cd\0\u2ac6\0\u2b11\0\u2b5c\0\u2ba7"+ + "\0\u2bf2\0\u2c3d\0\u2c88\0\u2cd3\0\u2d1e\0\u2d69\0\u2db4\0\u0384"+ + "\0\u2dff\0\u2e4a\0\u01c2\0\u2dff\0\u2e95\0\u2ee0\0\u2f2b\0\u2f76"+ + "\0\u02a3\0\u2fc1\0\u02a3\0\u02a3\0\u02a3\0\u300c\0\u3057\0\u30a2"+ + "\0\u30ed\0\u3138\0\u02a3\0\u3183\0\u31ce\0\u3219\0\u3264\0\u32af"+ + "\0\u32fa\0\u02a3\0\u3345\0\u3390\0\u33db\0\u3426\0\u3471\0\u01c2"+ + "\0\u01c2\0\u01c2\0\u01c2\0\u34bc\0\u3507\0\u3552\0\u01c2\0\u3507"+ + "\0\u359d\0\u35e8\0\u01c2\0\u3633\0\u367e\0\u01c2\0\u36c9\0\u2616"+ + "\0\u01c2\0\u3714\0\u375f\0\u37aa\0\u37f5\0\u3840\0\u388b\0\u01c2"+ + "\0\u38d6\0\u02a3\0\u02a3\0\u3921\0\u396c\0\u39b7\0\u3a02\0\u3a4d"+ + "\0\u3a98\0\u3ae3\0\u3b2e\0\u02a3\0\u3b79\0\u02a3\0\u3bc4\0\u3c0f"+ + "\0\u3c5a\0\u3ca5\0\u3cf0\0\u3d3b\0\u3d86\0\u3dd1\0\u3e1c\0\u3e67"+ + "\0\u3eb2\0\u3efd\0\u3f48\0\u3f93\0\u37aa\0\u37f5\0\u3fde\0\u4029"+ + "\0\u4074\0\u02a3\0\u40bf\0\u02a3\0\u02a3\0\u410a\0\u4155\0\u41a0"+ + "\0\u41eb\0\u02a3\0\u4236\0\u02a3\0\u4281\0\u3cf0\0\u3d3b\0\u42cc"+ + "\0\u4317\0\u4362\0\u43ad\0\u43f8\0\u02a3\0\u02a3\0\u02a3\0\u4443"+ + "\0\u02a3\0\u02a3\0\u448e\0\u02a3\0\u3507\0\u01c2\0\u01c2\0\u01c2"+ + "\0\u01c2\0\u43f8\0\u44d9\0\u02a3\0\u02a3"; private static int [] zzUnpackRowMap() { - int [] result = new int[339]; + int [] result = new int[341]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -319,337 +317,339 @@ class _PythonLexer implements FlexLexerEx { "\1\12\1\61\1\62\1\63\1\64\1\65\1\66\1\67"+ "\1\70\1\71\1\72\1\73\1\74\1\75\1\7\11\76"+ "\1\77\1\76\1\100\1\0\6\76\2\77\1\101\1\20"+ - "\1\102\12\76\1\34\1\35\1\36\1\103\6\76\1\77"+ - "\1\76\1\77\1\76\1\77\3\76\1\77\25\76\1\0"+ - "\1\7\1\10\2\11\1\12\1\11\3\12\1\104\1\12"+ - "\1\100\1\7\1\12\1\7\1\15\1\12\1\16\1\12"+ - "\2\104\1\105\1\20\1\106\1\22\1\23\1\24\1\25"+ - "\1\26\1\27\1\30\1\31\1\32\1\107\1\34\1\35"+ - "\1\36\1\103\1\40\1\41\1\42\1\43\1\12\1\44"+ - "\1\110\1\46\1\111\1\12\1\112\1\51\1\52\1\53"+ - "\1\104\1\54\1\12\1\55\1\56\1\12\1\57\1\60"+ - "\1\12\1\61\1\62\1\63\1\64\1\65\1\66\1\67"+ - "\1\70\1\71\1\72\1\73\1\74\1\75\1\7\13\113"+ - "\1\114\1\0\10\113\1\115\1\116\1\117\1\113\1\120"+ - "\13\113\1\103\45\113\1\7\1\10\2\11\1\12\1\11"+ - "\3\12\1\121\1\12\1\100\1\7\1\12\1\7\1\15"+ - "\1\12\1\16\1\12\2\121\1\122\1\20\1\123\1\22"+ - "\1\124\1\125\1\126\1\26\1\127\1\130\1\131\1\132"+ - "\1\133\1\34\1\35\1\36\1\103\1\40\1\41\1\42"+ - "\1\43\1\12\1\44\1\134\1\46\1\135\1\12\1\136"+ - "\1\51\1\52\1\53\1\121\1\54\1\12\1\55\1\56"+ - "\1\12\1\57\1\60\1\12\1\61\1\62\1\63\1\64"+ - "\1\65\1\66\1\67\1\70\1\71\1\72\1\73\1\74"+ - "\1\75\1\7\13\137\1\140\1\0\10\137\1\115\1\141"+ - "\2\137\1\142\1\143\12\137\1\103\45\137\114\0\1\144"+ - "\1\145\1\144\1\0\1\144\1\146\1\147\1\150\1\151"+ - "\1\152\4\0\1\153\1\154\1\0\1\155\30\0\1\154"+ - "\2\0\1\151\2\0\1\152\1\150\3\0\1\146\25\0"+ - "\3\11\1\0\1\11\1\0\1\156\2\0\1\152\4\0"+ - "\1\153\1\154\1\0\1\155\30\0\1\154\5\0\1\152"+ - "\32\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ - "\3\0\1\12\16\0\26\12\17\0\10\12\1\157\1\12"+ - "\2\0\2\12\1\0\1\12\1\0\1\12\2\157\1\17"+ - "\1\0\1\21\1\22\16\0\5\12\1\157\1\12\1\157"+ - "\1\12\1\157\3\12\1\157\1\22\7\12\16\0\14\14"+ - "\1\0\30\14\1\0\45\14\1\0\3\160\1\0\1\160"+ - "\141\0\1\161\50\0\1\162\5\0\14\163\1\0\10\163"+ - "\1\164\1\165\16\163\1\166\45\163\14\167\1\0\11\167"+ - "\1\170\1\171\15\167\1\166\45\167\1\0\10\12\1\172"+ - "\1\12\2\0\2\12\1\0\1\12\1\0\1\12\2\172"+ - "\1\173\1\0\1\174\1\12\16\0\5\12\1\172\1\12"+ - "\1\172\1\12\1\172\3\12\1\172\10\12\52\0\1\175"+ - "\112\0\1\176\57\0\12\12\2\0\2\12\1\0\1\12"+ - "\1\0\3\12\3\0\1\12\16\0\1\12\1\177\1\12"+ - "\1\200\22\12\17\0\12\12\2\0\2\12\1\0\1\12"+ - "\1\0\3\12\3\0\1\12\16\0\13\12\1\201\12\12"+ - "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ - "\3\0\1\12\16\0\4\12\1\202\21\12\17\0\12\12"+ - "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\16\0\12\12\1\203\4\12\1\204\6\12\17\0\10\12"+ - "\1\157\1\12\2\0\2\12\1\0\1\12\1\0\1\12"+ - "\2\157\1\17\1\0\1\21\1\22\16\0\1\205\3\12"+ - "\1\206\1\157\1\12\1\157\1\12\1\157\3\12\1\157"+ - "\1\22\7\12\17\0\12\12\2\0\2\12\1\0\1\12"+ - "\1\0\3\12\3\0\1\12\16\0\5\12\1\207\20\12"+ - "\17\0\10\12\1\157\1\12\2\0\2\12\1\0\1\12"+ - "\1\0\1\12\2\157\1\17\1\0\1\21\1\22\16\0"+ - "\5\12\1\210\1\12\1\157\1\12\1\157\3\12\1\157"+ - "\1\22\7\12\17\0\10\12\1\157\1\12\2\0\2\12"+ - "\1\0\1\12\1\0\1\12\2\157\1\17\1\0\1\21"+ - "\1\22\16\0\5\12\1\157\1\12\1\157\1\12\1\157"+ - "\1\211\1\212\1\12\1\157\1\22\7\12\17\0\12\12"+ - "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\16\0\1\213\25\12\17\0\12\12\2\0\2\12\1\0"+ - "\1\12\1\0\3\12\3\0\1\12\16\0\5\12\1\214"+ - "\20\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ - "\3\12\3\0\1\12\16\0\1\12\1\215\1\12\1\216"+ - "\12\12\1\217\3\12\1\220\3\12\17\0\10\12\1\172"+ - "\1\12\2\0\2\12\1\0\1\12\1\0\1\12\2\172"+ - "\1\173\1\0\1\174\1\12\16\0\5\12\1\221\1\12"+ - "\1\172\1\12\1\172\1\12\1\222\1\223\1\172\10\12"+ - "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ - "\3\0\1\12\16\0\1\224\25\12\17\0\12\12\2\0"+ - "\2\12\1\0\1\12\1\0\3\12\3\0\1\12\16\0"+ - "\14\12\1\225\11\12\17\0\12\12\2\0\2\12\1\0"+ - "\1\12\1\0\3\12\3\0\1\12\16\0\12\12\1\226"+ - "\13\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ - "\3\12\3\0\1\12\16\0\25\12\1\227\52\0\1\230"+ - "\112\0\1\231\41\0\1\232\50\0\1\233\112\0\1\234"+ - "\43\0\1\235\46\0\1\236\112\0\1\237\112\0\1\240"+ - "\112\0\1\241\112\0\1\242\50\0\1\243\41\0\1\244"+ - "\50\0\1\245\1\246\15\0\1\247\11\0\2\247\1\101"+ - "\1\0\1\102\24\0\1\247\1\0\1\247\1\0\1\247"+ - "\3\0\1\247\26\0\14\100\1\0\30\100\1\0\45\100"+ - "\14\250\1\0\10\250\1\251\1\252\16\250\1\253\45\250"+ - "\14\254\1\0\11\254\1\255\1\256\15\254\1\253\45\254"+ - "\1\0\10\12\1\257\1\12\2\0\2\12\1\0\1\12"+ - "\1\0\1\12\2\257\1\105\1\0\1\106\1\22\16\0"+ - "\5\12\1\257\1\12\1\257\1\12\1\257\3\12\1\257"+ - "\1\22\7\12\16\0\14\260\1\0\10\260\1\261\1\262"+ - "\16\260\1\0\45\260\14\263\1\0\11\263\1\264\1\265"+ - "\15\263\1\0\45\263\13\0\1\266\26\0\1\267\2\0"+ - "\1\270\46\0\10\12\1\257\1\12\2\0\2\12\1\0"+ - "\1\12\1\0\1\12\2\257\1\105\1\0\1\106\1\22"+ - "\16\0\1\205\3\12\1\206\1\257\1\12\1\257\1\12"+ - "\1\257\3\12\1\257\1\22\7\12\17\0\10\12\1\257"+ - "\1\12\2\0\2\12\1\0\1\12\1\0\1\12\2\257"+ - "\1\105\1\0\1\106\1\22\16\0\5\12\1\271\1\12"+ - "\1\257\1\12\1\257\3\12\1\257\1\22\7\12\17\0"+ - "\10\12\1\257\1\12\2\0\2\12\1\0\1\12\1\0"+ - "\1\12\2\257\1\105\1\0\1\106\1\22\16\0\5\12"+ - "\1\257\1\12\1\257\1\12\1\257\1\211\1\212\1\12"+ - "\1\257\1\22\7\12\16\0\14\113\1\0\10\113\1\0"+ - "\1\272\1\0\1\113\1\273\13\113\1\0\45\113\14\114"+ - "\1\0\10\114\1\100\1\274\1\100\1\114\1\275\13\114"+ - "\1\0\45\114\25\0\1\276\65\0\113\113\27\0\1\277"+ - "\114\0\1\113\62\0\10\12\1\300\1\12\2\0\2\12"+ - "\1\0\1\12\1\0\1\12\2\300\1\122\1\0\1\301"+ - "\1\22\16\0\5\12\1\300\1\12\1\300\1\12\1\300"+ - "\3\12\1\300\1\22\7\12\16\0\14\302\1\0\10\302"+ - "\1\303\1\304\16\302\1\0\45\302\14\305\1\0\11\305"+ - "\1\306\1\307\15\305\1\0\45\305\14\310\1\0\10\310"+ - "\1\0\1\310\1\0\2\310\1\0\1\310\1\175\4\310"+ - "\3\0\1\310\1\0\45\310\1\0\10\12\1\300\1\12"+ - "\2\0\2\12\1\0\1\12\1\0\1\12\2\300\1\122"+ - "\1\0\1\301\1\22\16\0\1\205\3\12\1\206\1\300"+ - "\1\12\1\300\1\12\1\300\3\12\1\300\1\22\7\12"+ - "\17\0\10\12\1\300\1\12\2\0\2\12\1\0\1\12"+ - "\1\0\1\12\2\300\1\122\1\0\1\301\1\22\16\0"+ - "\5\12\1\311\1\12\1\300\1\12\1\300\3\12\1\300"+ - "\1\22\7\12\17\0\10\12\1\300\1\12\2\0\2\12"+ - "\1\0\1\12\1\0\1\12\2\300\1\122\1\0\1\301"+ - "\1\22\16\0\5\12\1\300\1\12\1\300\1\12\1\300"+ - "\1\211\1\212\1\12\1\300\1\22\7\12\16\0\14\137"+ - "\1\0\10\137\1\0\1\312\2\137\2\0\12\137\1\0"+ - "\45\137\14\140\1\0\10\140\1\100\1\313\2\140\2\100"+ - "\12\140\1\0\45\140\14\0\1\137\30\0\1\137\46\0"+ - "\1\144\1\145\1\144\1\0\1\144\1\0\1\147\2\0"+ - "\1\152\4\0\1\153\1\154\1\0\1\155\30\0\1\154"+ - "\5\0\1\152\32\0\3\145\1\0\1\145\1\0\1\314"+ - "\7\0\1\153\1\154\1\0\1\155\30\0\1\154\40\0"+ - "\5\315\1\0\1\316\1\0\1\315\6\0\1\315\2\0"+ - "\1\315\4\0\1\315\16\0\1\315\1\0\1\315\1\0"+ - "\1\315\2\0\1\315\1\0\1\315\4\0\1\315\26\0"+ - "\1\144\1\145\1\144\1\0\1\144\106\0\1\317\1\0"+ - "\1\317\1\0\1\317\1\0\1\320\104\0\1\321\3\0"+ - "\1\321\1\0\1\322\104\0\3\160\1\0\1\160\12\0"+ - "\1\154\1\0\1\155\30\0\1\154\40\0\3\323\1\0"+ - "\1\323\13\0\1\324\53\0\1\324\16\0\3\11\1\0"+ - "\1\11\106\0\10\12\1\325\1\12\2\0\2\12\1\0"+ - "\1\12\1\0\1\12\2\325\1\17\1\0\1\21\1\22"+ - "\16\0\5\12\1\325\1\12\1\325\1\12\1\325\3\12"+ - "\1\325\1\22\7\12\17\0\3\160\1\0\1\160\1\0"+ - "\1\326\10\0\1\154\1\0\1\155\30\0\1\154\37\0"+ - "\14\163\1\0\10\163\1\327\1\165\16\163\1\166\45\163"+ - "\25\0\1\330\1\331\13\0\2\332\1\0\2\166\44\0"+ - "\113\163\14\167\1\0\11\167\1\170\1\327\15\167\1\166"+ - "\160\167\26\0\1\331\1\333\12\0\2\332\1\0\2\166"+ - "\45\0\10\12\1\334\1\12\2\0\2\12\1\0\1\12"+ - "\1\0\1\12\2\334\1\173\1\0\1\174\1\12\16\0"+ - "\5\12\1\334\1\12\1\334\1\12\1\334\3\12\1\334"+ - "\10\12\43\0\1\335\114\0\1\336\64\0\12\12\2\0"+ - "\2\12\1\0\1\12\1\0\3\12\3\0\1\12\16\0"+ - "\2\12\1\337\23\12\17\0\12\12\2\0\2\12\1\0"+ - "\1\12\1\0\3\12\3\0\1\12\16\0\3\12\1\340"+ - "\22\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ - "\3\12\3\0\1\12\16\0\6\12\1\341\17\12\17\0"+ + "\1\102\5\76\1\103\5\76\1\35\1\36\1\37\6\76"+ + "\1\77\1\76\1\77\1\76\1\77\3\76\1\77\25\76"+ + "\1\0\1\7\1\10\2\11\1\12\1\11\3\12\1\104"+ + "\1\12\1\100\1\7\1\12\1\7\1\15\1\12\1\16"+ + "\1\12\2\104\1\105\1\20\1\106\1\22\1\23\1\24"+ + "\1\25\1\26\1\103\1\30\1\31\1\32\1\33\1\107"+ + "\1\35\1\36\1\37\1\40\1\41\1\42\1\43\1\12"+ + "\1\44\1\110\1\46\1\111\1\12\1\112\1\51\1\52"+ + "\1\53\1\104\1\54\1\12\1\55\1\56\1\12\1\57"+ + "\1\60\1\12\1\61\1\62\1\63\1\64\1\65\1\66"+ + "\1\67\1\70\1\71\1\72\1\73\1\74\1\75\1\7"+ + "\13\113\1\114\1\0\10\113\1\115\1\116\1\117\1\113"+ + "\1\120\3\113\1\121\55\113\1\7\1\10\2\11\1\12"+ + "\1\11\3\12\1\122\1\12\1\100\1\7\1\12\1\7"+ + "\1\15\1\12\1\16\1\12\2\122\1\123\1\20\1\124"+ + "\1\22\1\125\1\126\1\127\1\26\1\130\1\131\1\132"+ + "\1\133\1\134\1\135\1\35\1\36\1\37\1\40\1\41"+ + "\1\42\1\43\1\12\1\44\1\136\1\46\1\137\1\12"+ + "\1\140\1\51\1\52\1\53\1\122\1\54\1\12\1\55"+ + "\1\56\1\12\1\57\1\60\1\12\1\61\1\62\1\63"+ + "\1\64\1\65\1\66\1\67\1\70\1\71\1\72\1\73"+ + "\1\74\1\75\1\7\13\141\1\142\1\0\10\141\1\115"+ + "\1\143\2\141\1\144\1\145\2\141\1\121\55\141\114\0"+ + "\1\146\1\147\1\146\1\0\1\146\1\150\1\151\1\152"+ + "\1\153\1\154\4\0\1\155\1\156\1\0\1\157\30\0"+ + "\1\156\2\0\1\153\2\0\1\154\1\152\3\0\1\150"+ + "\25\0\3\11\1\0\1\11\1\0\1\160\2\0\1\154"+ + "\4\0\1\155\1\156\1\0\1\157\30\0\1\156\5\0"+ + "\1\154\32\0\12\12\2\0\2\12\1\0\1\12\1\0"+ + "\3\12\3\0\1\12\16\0\26\12\17\0\10\12\1\161"+ + "\1\12\2\0\2\12\1\0\1\12\1\0\1\12\2\161"+ + "\1\17\1\0\1\21\1\22\16\0\5\12\1\161\1\12"+ + "\1\161\1\12\1\161\3\12\1\161\1\22\7\12\16\0"+ + "\14\14\1\0\20\14\1\0\55\14\1\0\3\162\1\0"+ + "\1\162\141\0\1\163\50\0\1\164\5\0\14\165\1\0"+ + "\10\165\1\166\1\167\6\165\1\170\55\165\14\171\1\0"+ + "\11\171\1\172\1\173\5\171\1\170\55\171\1\0\10\12"+ + "\1\174\1\12\2\0\2\12\1\0\1\12\1\0\1\12"+ + "\2\174\1\175\1\0\1\176\1\12\16\0\5\12\1\174"+ + "\1\12\1\174\1\12\1\174\3\12\1\174\10\12\52\0"+ + "\1\177\112\0\1\200\57\0\12\12\2\0\2\12\1\0"+ + "\1\12\1\0\3\12\3\0\1\12\16\0\1\12\1\201"+ + "\1\12\1\202\22\12\17\0\12\12\2\0\2\12\1\0"+ + "\1\12\1\0\3\12\3\0\1\12\16\0\13\12\1\203"+ + "\12\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ + "\3\12\3\0\1\12\16\0\4\12\1\204\21\12\17\0"+ "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ - "\1\12\16\0\12\12\1\342\3\12\1\343\7\12\17\0"+ + "\1\12\16\0\12\12\1\205\4\12\1\206\6\12\17\0"+ + "\10\12\1\161\1\12\2\0\2\12\1\0\1\12\1\0"+ + "\1\12\2\161\1\17\1\0\1\21\1\22\16\0\1\207"+ + "\3\12\1\210\1\161\1\12\1\161\1\12\1\161\3\12"+ + "\1\161\1\22\7\12\17\0\12\12\2\0\2\12\1\0"+ + "\1\12\1\0\3\12\3\0\1\12\16\0\5\12\1\211"+ + "\20\12\17\0\10\12\1\161\1\12\2\0\2\12\1\0"+ + "\1\12\1\0\1\12\2\161\1\17\1\0\1\21\1\22"+ + "\16\0\5\12\1\212\1\12\1\161\1\12\1\161\3\12"+ + "\1\161\1\22\7\12\17\0\10\12\1\161\1\12\2\0"+ + "\2\12\1\0\1\12\1\0\1\12\2\161\1\17\1\0"+ + "\1\21\1\22\16\0\5\12\1\161\1\12\1\161\1\12"+ + "\1\161\1\213\1\214\1\12\1\161\1\22\7\12\17\0"+ "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ - "\1\12\16\0\3\12\1\344\10\12\1\345\11\12\17\0"+ - "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ - "\1\12\16\0\11\12\1\346\14\12\17\0\12\12\2\0"+ - "\2\12\1\0\1\12\1\0\3\12\3\0\1\12\16\0"+ - "\14\12\1\347\11\12\17\0\12\12\2\0\2\12\1\0"+ - "\1\12\1\0\3\12\3\0\1\12\16\0\6\12\1\350"+ - "\17\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ - "\3\12\3\0\1\12\16\0\21\12\1\351\4\12\17\0"+ - "\10\12\1\325\1\12\2\0\2\12\1\0\1\12\1\0"+ - "\1\12\2\325\1\17\1\0\1\21\1\22\16\0\4\12"+ - "\1\352\1\325\1\12\1\325\1\12\1\325\3\12\1\325"+ - "\1\22\7\12\17\0\12\12\2\0\2\12\1\0\1\12"+ - "\1\0\3\12\3\0\1\12\16\0\1\353\25\12\17\0"+ - "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ - "\1\12\16\0\1\12\1\354\24\12\17\0\12\12\2\0"+ - "\2\12\1\0\1\12\1\0\3\12\3\0\1\12\16\0"+ - "\22\12\1\355\3\12\17\0\12\12\2\0\2\12\1\0"+ - "\1\12\1\0\3\12\3\0\1\12\16\0\20\12\1\356"+ - "\5\12\17\0\10\12\1\334\1\12\2\0\2\12\1\0"+ - "\1\12\1\0\1\12\2\334\1\173\1\0\1\174\1\12"+ - "\16\0\5\12\1\334\1\12\1\334\1\12\1\334\1\12"+ - "\1\357\1\12\1\334\10\12\17\0\12\12\2\0\2\12"+ + "\1\12\16\0\1\215\25\12\17\0\12\12\2\0\2\12"+ "\1\0\1\12\1\0\3\12\3\0\1\12\16\0\5\12"+ - "\1\360\20\12\17\0\12\12\2\0\2\12\1\0\1\12"+ - "\1\0\3\12\3\0\1\12\16\0\1\12\1\361\24\12"+ - "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ - "\3\0\1\12\16\0\3\12\1\362\22\12\17\0\12\12"+ - "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\16\0\4\12\1\363\21\12\17\0\12\12\2\0\2\12"+ - "\1\0\1\12\1\0\3\12\3\0\1\12\16\0\13\12"+ - "\1\364\12\12\17\0\12\12\2\0\2\12\1\0\1\12"+ - "\1\0\3\12\3\0\1\12\16\0\14\12\1\365\11\12"+ - "\52\0\1\366\112\0\1\367\112\0\1\370\112\0\1\371"+ - "\67\0\1\372\11\0\2\372\1\101\1\0\1\102\24\0"+ - "\1\372\1\0\1\372\1\0\1\372\3\0\1\372\26\0"+ - "\14\250\1\0\10\250\1\373\1\252\16\250\1\253\45\250"+ - "\25\0\1\374\1\375\13\0\2\376\1\0\2\253\44\0"+ - "\113\250\14\254\1\0\11\254\1\255\1\373\15\254\1\253"+ - "\160\254\26\0\1\375\1\377\12\0\2\376\1\0\2\253"+ - "\45\0\10\12\1\u0100\1\12\2\0\2\12\1\0\1\12"+ - "\1\0\1\12\2\u0100\1\105\1\0\1\106\1\22\16\0"+ - "\5\12\1\u0100\1\12\1\u0100\1\12\1\u0100\3\12\1\u0100"+ - "\1\22\7\12\16\0\14\260\1\0\10\260\1\u0101\1\262"+ - "\16\260\1\0\45\260\25\0\1\u0102\65\0\113\260\14\263"+ - "\1\0\11\263\1\264\1\u0101\15\263\1\0\160\263\27\0"+ - "\1\u0103\63\0\14\266\1\0\30\266\1\270\45\266\1\0"+ - "\10\12\1\u0100\1\12\2\0\2\12\1\0\1\12\1\0"+ - "\1\12\2\u0100\1\105\1\0\1\106\1\22\16\0\4\12"+ - "\1\352\1\u0100\1\12\1\u0100\1\12\1\u0100\3\12\1\u0100"+ - "\1\22\7\12\16\0\14\114\1\113\30\114\1\113\45\114"+ - "\14\100\1\0\14\100\1\114\13\100\1\0\45\100\25\0"+ - "\1\u0104\114\0\1\u0104\64\0\10\12\1\u0105\1\12\2\0"+ - "\2\12\1\0\1\12\1\0\1\12\2\u0105\1\122\1\0"+ - "\1\301\1\22\16\0\5\12\1\u0105\1\12\1\u0105\1\12"+ - "\1\u0105\3\12\1\u0105\1\22\7\12\16\0\14\305\1\0"+ - "\11\305\1\306\1\u0106\15\305\1\0\45\305\14\302\1\0"+ - "\10\302\1\u0107\1\304\16\302\1\0\160\302\14\305\1\0"+ - "\11\305\1\306\1\u0107\15\305\1\0\160\305\27\0\1\u0108"+ - "\63\0\14\310\1\0\10\310\1\0\1\310\1\0\2\310"+ - "\1\0\1\310\1\0\4\310\3\0\1\310\1\0\45\310"+ - "\1\0\10\12\1\u0105\1\12\2\0\2\12\1\0\1\12"+ - "\1\0\1\12\2\u0105\1\122\1\0\1\301\1\22\16\0"+ - "\4\12\1\352\1\u0105\1\12\1\u0105\1\12\1\u0105\3\12"+ - "\1\u0105\1\22\7\12\16\0\14\100\1\137\30\100\1\137"+ - "\45\100\1\0\3\145\1\0\1\145\106\0\5\315\1\0"+ - "\1\316\1\0\1\315\1\152\5\0\1\315\2\0\1\315"+ - "\4\0\1\315\16\0\1\315\1\0\1\315\1\0\1\315"+ - "\2\0\1\315\1\0\1\315\1\152\3\0\1\315\26\0"+ - "\5\315\3\0\1\315\6\0\1\315\2\0\1\315\4\0"+ - "\1\315\16\0\1\315\1\0\1\315\1\0\1\315\2\0"+ - "\1\315\1\0\1\315\4\0\1\315\26\0\1\317\1\0"+ - "\1\317\1\0\1\317\1\0\1\320\2\0\1\152\46\0"+ - "\1\152\32\0\1\317\1\0\1\317\1\0\1\317\106\0"+ - "\1\321\3\0\1\321\1\0\1\322\2\0\1\152\46\0"+ - "\1\152\32\0\1\321\3\0\1\321\106\0\3\323\1\0"+ - "\1\323\1\0\1\324\12\0\1\155\71\0\3\323\1\0"+ - "\1\323\106\0\12\12\2\0\2\12\1\0\1\12\1\0"+ - "\3\12\1\17\1\0\1\21\1\22\16\0\16\12\1\22"+ - "\7\12\44\0\1\331\13\0\2\332\1\0\2\166\44\0"+ - "\25\330\1\u0109\1\u010a\64\330\26\333\1\u010b\1\u010c\63\333"+ - "\1\0\10\12\1\u010d\1\12\2\0\2\12\1\0\1\12"+ - "\1\0\1\12\2\u010d\1\173\1\0\1\174\1\12\16\0"+ - "\5\12\1\u010d\1\12\1\u010d\1\12\1\u010d\3\12\1\u010d"+ - "\10\12\43\0\1\u010e\114\0\1\u010e\64\0\12\12\2\0"+ - "\2\12\1\0\1\12\1\0\3\12\3\0\1\12\16\0"+ - "\4\12\1\u010f\21\12\17\0\12\12\2\0\2\12\1\0"+ - "\1\12\1\0\3\12\3\0\1\12\16\0\4\12\1\u0110"+ - "\21\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ - "\3\12\3\0\1\12\16\0\16\12\1\u0111\7\12\17\0"+ - "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ - "\1\12\16\0\4\12\1\u0112\21\12\17\0\12\12\2\0"+ - "\2\12\1\0\1\12\1\0\3\12\3\0\1\12\16\0"+ - "\3\12\1\u0113\22\12\17\0\12\12\2\0\2\12\1\0"+ - "\1\12\1\0\3\12\3\0\1\12\16\0\15\12\1\u0114"+ + "\1\216\20\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\16\0\1\12\1\217\1\12"+ + "\1\220\12\12\1\221\3\12\1\222\3\12\17\0\10\12"+ + "\1\174\1\12\2\0\2\12\1\0\1\12\1\0\1\12"+ + "\2\174\1\175\1\0\1\176\1\12\16\0\5\12\1\223"+ + "\1\12\1\174\1\12\1\174\1\12\1\224\1\225\1\174"+ "\10\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ - "\3\12\3\0\1\12\16\0\1\u0115\25\12\17\0\12\12"+ + "\3\12\3\0\1\12\16\0\1\226\25\12\17\0\12\12"+ "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\16\0\3\12\1\u0116\22\12\17\0\12\12\2\0\2\12"+ + "\16\0\14\12\1\227\11\12\17\0\12\12\2\0\2\12"+ + "\1\0\1\12\1\0\3\12\3\0\1\12\16\0\12\12"+ + "\1\230\13\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\16\0\25\12\1\231\52\0"+ + "\1\232\112\0\1\233\41\0\1\234\50\0\1\235\112\0"+ + "\1\236\43\0\1\237\46\0\1\240\112\0\1\241\112\0"+ + "\1\242\112\0\1\243\112\0\1\244\50\0\1\245\41\0"+ + "\1\246\50\0\1\247\1\250\15\0\1\251\11\0\2\251"+ + "\1\101\1\0\1\102\24\0\1\251\1\0\1\251\1\0"+ + "\1\251\3\0\1\251\26\0\14\100\1\0\20\100\1\0"+ + "\55\100\14\252\1\0\10\252\1\253\1\254\6\252\1\255"+ + "\55\252\14\256\1\0\11\256\1\257\1\260\5\256\1\255"+ + "\55\256\1\0\10\12\1\261\1\12\2\0\2\12\1\0"+ + "\1\12\1\0\1\12\2\261\1\105\1\0\1\106\1\22"+ + "\16\0\5\12\1\261\1\12\1\261\1\12\1\261\3\12"+ + "\1\261\1\22\7\12\16\0\14\262\1\0\10\262\1\263"+ + "\1\264\6\262\1\0\55\262\14\265\1\0\11\265\1\266"+ + "\1\267\5\265\1\0\55\265\13\0\1\270\21\0\1\271"+ + "\5\0\1\272\50\0\10\12\1\261\1\12\2\0\2\12"+ + "\1\0\1\12\1\0\1\12\2\261\1\105\1\0\1\106"+ + "\1\22\16\0\1\207\3\12\1\210\1\261\1\12\1\261"+ + "\1\12\1\261\3\12\1\261\1\22\7\12\17\0\10\12"+ + "\1\261\1\12\2\0\2\12\1\0\1\12\1\0\1\12"+ + "\2\261\1\105\1\0\1\106\1\22\16\0\5\12\1\273"+ + "\1\12\1\261\1\12\1\261\3\12\1\261\1\22\7\12"+ + "\17\0\10\12\1\261\1\12\2\0\2\12\1\0\1\12"+ + "\1\0\1\12\2\261\1\105\1\0\1\106\1\22\16\0"+ + "\5\12\1\261\1\12\1\261\1\12\1\261\1\213\1\214"+ + "\1\12\1\261\1\22\7\12\16\0\14\113\1\0\10\113"+ + "\1\0\1\274\1\0\1\113\1\275\3\113\1\0\55\113"+ + "\14\114\1\0\10\114\1\100\1\276\1\100\1\114\1\277"+ + "\3\114\1\0\55\114\25\0\1\300\65\0\113\113\27\0"+ + "\1\301\114\0\1\113\62\0\10\12\1\302\1\12\2\0"+ + "\2\12\1\0\1\12\1\0\1\12\2\302\1\123\1\0"+ + "\1\303\1\22\16\0\5\12\1\302\1\12\1\302\1\12"+ + "\1\302\3\12\1\302\1\22\7\12\16\0\14\304\1\0"+ + "\10\304\1\305\1\306\6\304\1\0\55\304\14\307\1\0"+ + "\11\307\1\310\1\311\5\307\1\0\55\307\14\312\1\0"+ + "\10\312\1\0\1\312\1\0\2\312\1\0\1\312\1\177"+ + "\1\0\4\312\3\0\46\312\1\0\10\12\1\302\1\12"+ + "\2\0\2\12\1\0\1\12\1\0\1\12\2\302\1\123"+ + "\1\0\1\303\1\22\16\0\1\207\3\12\1\210\1\302"+ + "\1\12\1\302\1\12\1\302\3\12\1\302\1\22\7\12"+ + "\17\0\10\12\1\302\1\12\2\0\2\12\1\0\1\12"+ + "\1\0\1\12\2\302\1\123\1\0\1\303\1\22\16\0"+ + "\5\12\1\313\1\12\1\302\1\12\1\302\3\12\1\302"+ + "\1\22\7\12\17\0\10\12\1\302\1\12\2\0\2\12"+ + "\1\0\1\12\1\0\1\12\2\302\1\123\1\0\1\303"+ + "\1\22\16\0\5\12\1\302\1\12\1\302\1\12\1\302"+ + "\1\213\1\214\1\12\1\302\1\22\7\12\16\0\14\141"+ + "\1\0\10\141\1\0\1\314\2\141\2\0\2\141\1\0"+ + "\55\141\14\142\1\0\10\142\1\100\1\315\2\142\2\100"+ + "\2\142\1\0\55\142\14\0\1\141\20\0\1\141\56\0"+ + "\1\146\1\147\1\146\1\0\1\146\1\0\1\151\2\0"+ + "\1\154\4\0\1\155\1\156\1\0\1\157\30\0\1\156"+ + "\5\0\1\154\32\0\3\147\1\0\1\147\1\0\1\316"+ + "\7\0\1\155\1\156\1\0\1\157\30\0\1\156\40\0"+ + "\5\317\1\0\1\320\1\0\1\317\6\0\1\317\2\0"+ + "\1\317\4\0\1\317\16\0\1\317\1\0\1\317\1\0"+ + "\1\317\2\0\1\317\1\0\1\317\4\0\1\317\26\0"+ + "\1\146\1\147\1\146\1\0\1\146\106\0\1\321\1\0"+ + "\1\321\1\0\1\321\1\0\1\322\104\0\1\323\3\0"+ + "\1\323\1\0\1\324\104\0\3\162\1\0\1\162\12\0"+ + "\1\156\1\0\1\157\30\0\1\156\40\0\3\325\1\0"+ + "\1\325\13\0\1\326\53\0\1\326\16\0\3\11\1\0"+ + "\1\11\106\0\10\12\1\327\1\12\2\0\2\12\1\0"+ + "\1\12\1\0\1\12\2\327\1\17\1\0\1\21\1\22"+ + "\16\0\5\12\1\327\1\12\1\327\1\12\1\327\3\12"+ + "\1\327\1\22\7\12\17\0\3\162\1\0\1\162\1\0"+ + "\1\330\10\0\1\156\1\0\1\157\30\0\1\156\37\0"+ + "\14\165\1\0\10\165\1\331\1\167\6\165\1\170\55\165"+ + "\25\0\1\332\1\333\6\0\1\170\5\0\2\334\1\0"+ + "\1\170\44\0\113\165\14\171\1\0\11\171\1\172\1\331"+ + "\5\171\1\170\170\171\26\0\1\333\1\335\5\0\1\170"+ + "\5\0\2\334\1\0\1\170\45\0\10\12\1\336\1\12"+ + "\2\0\2\12\1\0\1\12\1\0\1\12\2\336\1\175"+ + "\1\0\1\176\1\12\16\0\5\12\1\336\1\12\1\336"+ + "\1\12\1\336\3\12\1\336\10\12\43\0\1\337\114\0"+ + "\1\340\64\0\12\12\2\0\2\12\1\0\1\12\1\0"+ + "\3\12\3\0\1\12\16\0\2\12\1\341\23\12\17\0"+ + "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ + "\1\12\16\0\3\12\1\342\22\12\17\0\12\12\2\0"+ + "\2\12\1\0\1\12\1\0\3\12\3\0\1\12\16\0"+ + "\6\12\1\343\17\12\17\0\12\12\2\0\2\12\1\0"+ + "\1\12\1\0\3\12\3\0\1\12\16\0\12\12\1\344"+ + "\3\12\1\345\7\12\17\0\12\12\2\0\2\12\1\0"+ + "\1\12\1\0\3\12\3\0\1\12\16\0\3\12\1\346"+ + "\10\12\1\347\11\12\17\0\12\12\2\0\2\12\1\0"+ + "\1\12\1\0\3\12\3\0\1\12\16\0\11\12\1\350"+ + "\14\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ + "\3\12\3\0\1\12\16\0\14\12\1\351\11\12\17\0"+ + "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ + "\1\12\16\0\6\12\1\352\17\12\17\0\12\12\2\0"+ + "\2\12\1\0\1\12\1\0\3\12\3\0\1\12\16\0"+ + "\21\12\1\353\4\12\17\0\10\12\1\327\1\12\2\0"+ + "\2\12\1\0\1\12\1\0\1\12\2\327\1\17\1\0"+ + "\1\21\1\22\16\0\4\12\1\354\1\327\1\12\1\327"+ + "\1\12\1\327\3\12\1\327\1\22\7\12\17\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ + "\16\0\1\355\25\12\17\0\12\12\2\0\2\12\1\0"+ + "\1\12\1\0\3\12\3\0\1\12\16\0\1\12\1\356"+ + "\24\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ + "\3\12\3\0\1\12\16\0\22\12\1\357\3\12\17\0"+ + "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ + "\1\12\16\0\20\12\1\360\5\12\17\0\10\12\1\336"+ + "\1\12\2\0\2\12\1\0\1\12\1\0\1\12\2\336"+ + "\1\175\1\0\1\176\1\12\16\0\5\12\1\336\1\12"+ + "\1\336\1\12\1\336\1\12\1\361\1\12\1\336\10\12"+ + "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ + "\3\0\1\12\16\0\5\12\1\362\20\12\17\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ + "\16\0\1\12\1\363\24\12\17\0\12\12\2\0\2\12"+ + "\1\0\1\12\1\0\3\12\3\0\1\12\16\0\3\12"+ + "\1\364\22\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\16\0\4\12\1\365\21\12"+ + "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ + "\3\0\1\12\16\0\13\12\1\366\12\12\17\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ + "\16\0\14\12\1\367\11\12\52\0\1\370\112\0\1\371"+ + "\112\0\1\372\112\0\1\373\67\0\1\374\11\0\2\374"+ + "\1\101\1\0\1\102\24\0\1\374\1\0\1\374\1\0"+ + "\1\374\3\0\1\374\26\0\14\252\1\0\10\252\1\375"+ + "\1\254\6\252\1\255\55\252\25\0\1\376\1\377\6\0"+ + "\1\255\5\0\2\u0100\1\0\1\255\44\0\113\252\14\256"+ + "\1\0\11\256\1\257\1\375\5\256\1\255\170\256\26\0"+ + "\1\377\1\u0101\5\0\1\255\5\0\2\u0100\1\0\1\255"+ + "\45\0\10\12\1\u0102\1\12\2\0\2\12\1\0\1\12"+ + "\1\0\1\12\2\u0102\1\105\1\0\1\106\1\22\16\0"+ + "\5\12\1\u0102\1\12\1\u0102\1\12\1\u0102\3\12\1\u0102"+ + "\1\22\7\12\16\0\14\262\1\0\10\262\1\u0103\1\264"+ + "\6\262\1\0\55\262\25\0\1\u0104\65\0\113\262\14\265"+ + "\1\0\11\265\1\266\1\u0103\5\265\1\0\170\265\27\0"+ + "\1\u0105\63\0\14\270\1\0\20\270\1\271\55\270\1\0"+ + "\10\12\1\u0102\1\12\2\0\2\12\1\0\1\12\1\0"+ + "\1\12\2\u0102\1\105\1\0\1\106\1\22\16\0\4\12"+ + "\1\354\1\u0102\1\12\1\u0102\1\12\1\u0102\3\12\1\u0102"+ + "\1\22\7\12\16\0\14\114\1\113\20\114\1\113\55\114"+ + "\14\100\1\0\14\100\1\114\3\100\1\0\55\100\25\0"+ + "\1\u0106\114\0\1\u0106\64\0\10\12\1\u0107\1\12\2\0"+ + "\2\12\1\0\1\12\1\0\1\12\2\u0107\1\123\1\0"+ + "\1\303\1\22\16\0\5\12\1\u0107\1\12\1\u0107\1\12"+ + "\1\u0107\3\12\1\u0107\1\22\7\12\16\0\14\307\1\0"+ + "\11\307\1\310\1\u0108\5\307\1\0\55\307\14\304\1\0"+ + "\10\304\1\u0109\1\306\6\304\1\0\170\304\14\307\1\0"+ + "\11\307\1\310\1\u0109\5\307\1\0\170\307\27\0\1\u010a"+ + "\63\0\14\312\1\0\10\312\1\0\1\312\1\0\2\312"+ + "\1\0\1\312\2\0\4\312\3\0\46\312\1\0\10\12"+ + "\1\u0107\1\12\2\0\2\12\1\0\1\12\1\0\1\12"+ + "\2\u0107\1\123\1\0\1\303\1\22\16\0\4\12\1\354"+ + "\1\u0107\1\12\1\u0107\1\12\1\u0107\3\12\1\u0107\1\22"+ + "\7\12\16\0\14\100\1\141\20\100\1\141\55\100\1\0"+ + "\3\147\1\0\1\147\106\0\5\317\1\0\1\320\1\0"+ + "\1\317\1\154\5\0\1\317\2\0\1\317\4\0\1\317"+ + "\16\0\1\317\1\0\1\317\1\0\1\317\2\0\1\317"+ + "\1\0\1\317\1\154\3\0\1\317\26\0\5\317\3\0"+ + "\1\317\6\0\1\317\2\0\1\317\4\0\1\317\16\0"+ + "\1\317\1\0\1\317\1\0\1\317\2\0\1\317\1\0"+ + "\1\317\4\0\1\317\26\0\1\321\1\0\1\321\1\0"+ + "\1\321\1\0\1\322\2\0\1\154\46\0\1\154\32\0"+ + "\1\321\1\0\1\321\1\0\1\321\106\0\1\323\3\0"+ + "\1\323\1\0\1\324\2\0\1\154\46\0\1\154\32\0"+ + "\1\323\3\0\1\323\106\0\3\325\1\0\1\325\1\0"+ + "\1\326\12\0\1\157\71\0\3\325\1\0\1\325\106\0"+ + "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\1\17"+ + "\1\0\1\21\1\22\16\0\16\12\1\22\7\12\44\0"+ + "\1\333\6\0\1\170\5\0\2\334\1\0\1\170\44\0"+ + "\25\332\1\u010b\1\u010c\64\332\26\335\1\u010d\1\u010e\63\335"+ + "\1\0\10\12\1\u010f\1\12\2\0\2\12\1\0\1\12"+ + "\1\0\1\12\2\u010f\1\175\1\0\1\176\1\12\16\0"+ + "\5\12\1\u010f\1\12\1\u010f\1\12\1\u010f\3\12\1\u010f"+ + "\10\12\43\0\1\u0110\114\0\1\u0110\64\0\12\12\2\0"+ + "\2\12\1\0\1\12\1\0\3\12\3\0\1\12\16\0"+ + "\4\12\1\u0111\21\12\17\0\12\12\2\0\2\12\1\0"+ + "\1\12\1\0\3\12\3\0\1\12\16\0\4\12\1\u0112"+ + "\21\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ + "\3\12\3\0\1\12\16\0\16\12\1\u0113\7\12\17\0"+ + "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ + "\1\12\16\0\4\12\1\u0114\21\12\17\0\12\12\2\0"+ + "\2\12\1\0\1\12\1\0\3\12\3\0\1\12\16\0"+ + "\3\12\1\u0115\22\12\17\0\12\12\2\0\2\12\1\0"+ + "\1\12\1\0\3\12\3\0\1\12\16\0\15\12\1\u0116"+ + "\10\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ + "\3\12\3\0\1\12\16\0\1\u0117\25\12\17\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ + "\16\0\3\12\1\u0118\22\12\17\0\12\12\2\0\2\12"+ "\1\0\1\12\1\0\3\12\3\0\1\12\16\0\6\12"+ - "\1\u0117\17\12\17\0\12\12\2\0\2\12\1\0\1\12"+ - "\1\0\3\12\3\0\1\12\16\0\7\12\1\u0118\16\12"+ + "\1\u0119\17\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\16\0\7\12\1\u011a\16\12"+ "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ - "\3\0\1\12\16\0\13\12\1\u0119\12\12\17\0\12\12"+ + "\3\0\1\12\16\0\13\12\1\u011b\12\12\17\0\12\12"+ "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\16\0\22\12\1\u011a\3\12\17\0\12\12\2\0\2\12"+ - "\1\0\1\12\1\0\3\12\3\0\1\12\16\0\1\u011b"+ + "\16\0\22\12\1\u011c\3\12\17\0\12\12\2\0\2\12"+ + "\1\0\1\12\1\0\3\12\3\0\1\12\16\0\1\u011d"+ "\25\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ - "\3\12\3\0\1\12\16\0\3\12\1\u011c\22\12\17\0"+ + "\3\12\3\0\1\12\16\0\3\12\1\u011e\22\12\17\0"+ "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ - "\1\12\16\0\12\12\1\u011d\13\12\17\0\12\12\2\0"+ + "\1\12\16\0\12\12\1\u011f\13\12\17\0\12\12\2\0"+ "\2\12\1\0\1\12\1\0\3\12\3\0\1\12\16\0"+ - "\7\12\1\u011e\16\12\17\0\12\12\2\0\2\12\1\0"+ - "\1\12\1\0\3\12\3\0\1\12\16\0\12\12\1\u011f"+ - "\13\12\43\0\1\101\1\0\1\102\111\0\1\375\13\0"+ - "\2\376\1\0\2\253\44\0\25\374\1\u0120\1\u0121\64\374"+ - "\26\377\1\u0122\1\u0123\63\377\1\0\12\12\2\0\2\12"+ - "\1\0\1\12\1\0\3\12\1\105\1\0\1\106\1\22"+ - "\16\0\16\12\1\22\7\12\16\0\25\u0102\1\u0124\1\u0125"+ - "\64\u0102\26\u0103\1\u0126\1\u0127\63\u0103\1\0\12\12\2\0"+ - "\2\12\1\0\1\12\1\0\3\12\1\122\1\0\1\301"+ - "\1\22\16\0\16\12\1\22\7\12\16\0\26\u0108\1\u0128"+ - "\1\u0129\63\u0108\25\330\1\u012a\1\u012b\177\330\141\333\1\u012c"+ - "\1\u012d\63\333\1\0\12\12\2\0\2\12\1\0\1\12"+ - "\1\0\3\12\1\173\1\0\1\174\1\12\16\0\26\12"+ + "\7\12\1\u0120\16\12\17\0\12\12\2\0\2\12\1\0"+ + "\1\12\1\0\3\12\3\0\1\12\16\0\12\12\1\u0121"+ + "\13\12\43\0\1\101\1\0\1\102\111\0\1\377\6\0"+ + "\1\255\5\0\2\u0100\1\0\1\255\44\0\25\376\1\u0122"+ + "\1\u0123\64\376\26\u0101\1\u0124\1\u0125\63\u0101\1\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\1\105\1\0"+ + "\1\106\1\22\16\0\16\12\1\22\7\12\16\0\25\u0104"+ + "\1\u0126\1\u0127\64\u0104\26\u0105\1\u0128\1\u0129\63\u0105\1\0"+ + "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\1\123"+ + "\1\0\1\303\1\22\16\0\16\12\1\22\7\12\16\0"+ + "\26\u010a\1\u012a\1\u012b\63\u010a\25\332\1\u012c\1\u012d\177\332"+ + "\141\335\1\u012e\1\u012f\63\335\1\0\12\12\2\0\2\12"+ + "\1\0\1\12\1\0\3\12\1\175\1\0\1\176\1\12"+ + "\16\0\26\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\16\0\5\12\1\u0130\20\12"+ "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ - "\3\0\1\12\16\0\5\12\1\u012e\20\12\17\0\12\12"+ + "\3\0\1\12\16\0\20\12\1\u0131\5\12\17\0\12\12"+ "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\16\0\20\12\1\u012f\5\12\17\0\12\12\2\0\2\12"+ - "\1\0\1\12\1\0\3\12\3\0\1\12\16\0\4\12"+ - "\1\u0130\21\12\17\0\12\12\2\0\2\12\1\0\1\12"+ - "\1\0\3\12\3\0\1\12\16\0\5\12\1\u0131\20\12"+ + "\16\0\4\12\1\u0132\21\12\17\0\12\12\2\0\2\12"+ + "\1\0\1\12\1\0\3\12\3\0\1\12\16\0\5\12"+ + "\1\u0133\20\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\16\0\10\12\1\u0134\15\12"+ "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ - "\3\0\1\12\16\0\10\12\1\u0132\15\12\17\0\12\12"+ + "\3\0\1\12\16\0\3\12\1\u0135\22\12\17\0\12\12"+ "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\16\0\3\12\1\u0133\22\12\17\0\12\12\2\0\2\12"+ - "\1\0\1\12\1\0\3\12\3\0\1\12\16\0\14\12"+ - "\1\u0134\11\12\17\0\12\12\2\0\2\12\1\0\1\12"+ - "\1\0\3\12\3\0\1\12\16\0\2\12\1\u0135\23\12"+ - "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ - "\3\0\1\12\16\0\5\12\1\u0136\20\12\17\0\12\12"+ - "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\16\0\12\12\1\u0137\13\12\17\0\12\12\2\0\2\12"+ + "\16\0\14\12\1\u0136\11\12\17\0\12\12\2\0\2\12"+ "\1\0\1\12\1\0\3\12\3\0\1\12\16\0\2\12"+ - "\1\u0138\23\12\17\0\12\12\2\0\2\12\1\0\1\12"+ - "\1\0\3\12\3\0\1\12\16\0\1\u0139\25\12\17\0"+ - "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ - "\1\12\16\0\4\12\1\u013a\21\12\16\0\25\374\1\u013b"+ - "\1\u013c\177\374\141\377\1\u013d\1\u013e\63\377\25\u0102\1\u013f"+ - "\1\u0125\177\u0102\141\u0103\1\u0126\1\u0140\63\u0103\141\u0108\1\u0128"+ - "\1\u0141\63\u0108\25\330\1\u0142\1\u012b\64\330\26\333\1\u012c"+ - "\1\u0142\63\333\1\0\12\12\2\0\2\12\1\0\1\12"+ - "\1\0\3\12\3\0\1\12\16\0\6\12\1\u0143\17\12"+ + "\1\u0137\23\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\16\0\5\12\1\u0138\20\12"+ "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ - "\3\0\1\12\16\0\6\12\1\u0144\17\12\17\0\12\12"+ + "\3\0\1\12\16\0\12\12\1\u0139\13\12\17\0\12\12"+ "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\16\0\1\12\1\u0145\24\12\17\0\12\12\2\0\2\12"+ - "\1\0\1\12\1\0\3\12\3\0\1\12\16\0\1\12"+ - "\1\u0146\24\12\17\0\12\12\2\0\2\12\1\0\1\12"+ - "\1\0\3\12\3\0\1\12\16\0\1\u0147\25\12\17\0"+ - "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ - "\1\12\16\0\6\12\1\u0148\17\12\17\0\12\12\2\0"+ - "\2\12\1\0\1\12\1\0\3\12\3\0\1\12\16\0"+ - "\12\12\1\u0149\13\12\17\0\12\12\2\0\2\12\1\0"+ - "\1\12\1\0\3\12\3\0\1\12\16\0\12\12\1\u014a"+ - "\13\12\16\0\25\374\1\u014b\1\u013c\64\374\26\377\1\u013d"+ - "\1\u014b\63\377\25\u0102\1\u014c\1\u0125\64\u0102\26\u0103\1\u0126"+ - "\1\u014c\63\u0103\26\u0108\1\u0128\1\u014d\63\u0108\26\0\1\u014e"+ - "\13\0\2\u014f\1\0\2\u0150\45\0\12\12\2\0\2\12"+ - "\1\0\1\12\1\0\3\12\3\0\1\12\16\0\15\12"+ - "\1\u0151\10\12\17\0\12\12\2\0\2\12\1\0\1\12"+ - "\1\0\3\12\3\0\1\12\16\0\21\12\1\u0152\4\12"+ + "\16\0\2\12\1\u013a\23\12\17\0\12\12\2\0\2\12"+ + "\1\0\1\12\1\0\3\12\3\0\1\12\16\0\1\u013b"+ + "\25\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ + "\3\12\3\0\1\12\16\0\4\12\1\u013c\21\12\16\0"+ + "\25\376\1\u013d\1\u013e\177\376\141\u0101\1\u013f\1\u0140\63\u0101"+ + "\25\u0104\1\u0141\1\u0127\177\u0104\141\u0105\1\u0128\1\u0142\63\u0105"+ + "\141\u010a\1\u012a\1\u0143\63\u010a\25\332\1\u0144\1\u012d\64\332"+ + "\26\335\1\u012e\1\u0144\63\335\1\0\12\12\2\0\2\12"+ + "\1\0\1\12\1\0\3\12\3\0\1\12\16\0\6\12"+ + "\1\u0145\17\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\16\0\6\12\1\u0146\17\12"+ "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ - "\3\0\1\12\16\0\4\12\1\u0153\21\12\16\0"; + "\3\0\1\12\16\0\1\12\1\u0147\24\12\17\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ + "\16\0\1\12\1\u0148\24\12\17\0\12\12\2\0\2\12"+ + "\1\0\1\12\1\0\3\12\3\0\1\12\16\0\1\u0149"+ + "\25\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ + "\3\12\3\0\1\12\16\0\6\12\1\u014a\17\12\17\0"+ + "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ + "\1\12\16\0\12\12\1\u014b\13\12\17\0\12\12\2\0"+ + "\2\12\1\0\1\12\1\0\3\12\3\0\1\12\16\0"+ + "\12\12\1\u014c\13\12\16\0\25\376\1\u014d\1\u013e\64\376"+ + "\26\u0101\1\u013f\1\u014d\63\u0101\25\u0104\1\u014e\1\u0127\64\u0104"+ + "\26\u0105\1\u0128\1\u014e\63\u0105\26\u010a\1\u012a\1\u014f\63\u010a"+ + "\26\0\1\u0150\6\0\1\u0151\5\0\2\u0152\1\0\1\u0151"+ + "\45\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ + "\3\0\1\12\16\0\15\12\1\u0153\10\12\17\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ + "\16\0\21\12\1\u0154\4\12\17\0\12\12\2\0\2\12"+ + "\1\0\1\12\1\0\3\12\3\0\1\12\16\0\4\12"+ + "\1\u0155\21\12\16\0"; private static int [] zzUnpackTrans() { int [] result = new int[17700]; @@ -691,20 +691,21 @@ class _PythonLexer implements FlexLexerEx { private static final String ZZ_ATTRIBUTE_PACKED_0 = "\6\0\1\11\10\1\1\11\2\1\2\11\2\1\12\11"+ - "\32\1\4\11\4\1\1\11\20\1\2\11\1\1\5\11"+ - "\6\1\2\11\1\1\5\0\1\11\1\1\1\0\1\11"+ - "\1\0\2\1\2\11\3\1\1\11\6\1\2\11\31\1"+ - "\2\11\1\1\2\11\1\1\5\11\1\1\2\11\1\1"+ - "\1\0\3\1\1\11\12\1\2\0\1\11\1\1\2\0"+ - "\16\1\1\0\1\1\1\0\1\1\1\0\1\1\1\0"+ - "\1\1\1\0\1\1\1\0\1\1\1\0\2\1\1\11"+ - "\1\0\2\1\2\0\27\1\4\11\1\0\2\1\1\11"+ - "\1\0\2\1\1\11\2\1\1\11\2\1\1\11\1\1"+ - "\1\0\2\1\1\0\1\1\1\11\21\1\1\0\2\1"+ - "\13\0\15\1\7\0\12\1\3\11\1\0\1\11\3\1"; + "\32\1\4\11\4\1\1\11\15\1\1\11\3\1\2\11"+ + "\1\1\6\11\6\1\2\11\1\1\5\0\1\11\1\1"+ + "\1\0\1\11\1\0\2\1\2\11\3\1\1\11\6\1"+ + "\2\11\31\1\2\11\1\1\2\11\1\1\5\11\1\1"+ + "\2\11\1\1\1\0\3\1\1\11\12\1\1\0\1\11"+ + "\1\0\1\1\2\0\16\1\1\0\1\1\1\0\1\1"+ + "\1\0\1\1\1\0\1\1\1\0\1\1\1\0\1\1"+ + "\1\0\2\1\1\11\1\0\2\1\2\0\27\1\4\11"+ + "\1\0\2\1\1\11\1\0\2\1\1\11\2\1\1\11"+ + "\2\1\1\11\1\1\1\0\2\1\1\0\1\1\1\11"+ + "\21\1\1\0\2\1\13\0\15\1\7\0\12\1\4\11"+ + "\1\0\3\1"; private static int [] zzUnpackAttribute() { - int [] result = new int[339]; + int [] result = new int[341]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -1035,824 +1036,838 @@ return yylength()-s.length(); switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 1: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [264] { return PyTokenTypes.BAD_CHARACTER; }"); + System.out.println("action [266] { return PyTokenTypes.BAD_CHARACTER; }"); { return PyTokenTypes.BAD_CHARACTER; } // fall through - case 117: break; + case 119: break; case 2: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [176] { return PyTokenTypes.INTEGER_LITERAL; }"); + System.out.println("action [178] { return PyTokenTypes.INTEGER_LITERAL; }"); { return PyTokenTypes.INTEGER_LITERAL; } // fall through - case 118: break; + case 120: break; case 3: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [211] { return PyTokenTypes.IDENTIFIER; }"); + System.out.println("action [213] { return PyTokenTypes.IDENTIFIER; }"); { return PyTokenTypes.IDENTIFIER; } // fall through - case 119: break; + case 121: break; case 4: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [148] { if (zzCurrentPos == 0) yybegin(PENDING_DOCSTRING); return PyTokenTypes.END_OF_LINE_COMMENT; }"); + System.out.println("action [150] { if (zzCurrentPos == 0) yybegin(PENDING_DOCSTRING); return PyTokenTypes.END_OF_LINE_COMMENT; }"); { if (zzCurrentPos == 0) yybegin(PENDING_DOCSTRING); return PyTokenTypes.END_OF_LINE_COMMENT; } // fall through - case 120: break; + case 122: break; case 5: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [257] { return PyTokenTypes.DOT; }"); + System.out.println("action [259] { return PyTokenTypes.DOT; }"); { return PyTokenTypes.DOT; } // fall through - case 121: break; + case 123: break; case 6: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [237] { return PyTokenTypes.MINUS; }"); + System.out.println("action [239] { return PyTokenTypes.MINUS; }"); { return PyTokenTypes.MINUS; } // fall through - case 122: break; + case 124: break; case 7: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [150] { if (zzInput == YYEOF && zzStartRead == 0) return PyTokenTypes.DOCSTRING;"+ZZ_NL+" else return PyTokenTypes.SINGLE_QUOTED_STRING; }"); + System.out.println("action [152] { if (zzInput == YYEOF && zzStartRead == 0) return PyTokenTypes.DOCSTRING;"+ZZ_NL+" else return PyTokenTypes.SINGLE_QUOTED_STRING; }"); { if (zzInput == YYEOF && zzStartRead == 0) return PyTokenTypes.DOCSTRING; else return PyTokenTypes.SINGLE_QUOTED_STRING; } // fall through - case 123: break; + case 125: break; case 8: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [144] { return PyTokenTypes.BACKSLASH; }"); + System.out.println("action [146] { return PyTokenTypes.BACKSLASH; }"); { return PyTokenTypes.BACKSLASH; } // fall through - case 124: break; + case 126: break; case 9: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [251] { return PyTokenTypes.LBRACE; }"); + System.out.println("action [253] { return PyTokenTypes.LBRACE; }"); { return PyTokenTypes.LBRACE; } // fall through - case 125: break; + case 127: break; case 10: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [252] { return PyTokenTypes.RBRACE; }"); + System.out.println("action [254] { return PyTokenTypes.RBRACE; }"); { return PyTokenTypes.RBRACE; } // fall through - case 126: break; + case 128: break; case 11: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [259] { return PyTokenTypes.EQ; }"); + System.out.println("action [261] { return PyTokenTypes.EQ; }"); { return PyTokenTypes.EQ; } // fall through - case 127: break; + case 129: break; case 12: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [247] { return PyTokenTypes.LPAR; }"); - { return PyTokenTypes.LPAR; - } - // fall through - case 128: break; - case 13: - System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [248] { return PyTokenTypes.RPAR; }"); - { return PyTokenTypes.RPAR; - } - // fall through - case 129: break; - case 14: - System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [249] { return PyTokenTypes.LBRACKET; }"); - { return PyTokenTypes.LBRACKET; - } - // fall through - case 130: break; - case 15: - System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [250] { return PyTokenTypes.RBRACKET; }"); - { return PyTokenTypes.RBRACKET; - } - // fall through - case 131: break; - case 16: - System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [255] { return PyTokenTypes.COLON; }"); - { return PyTokenTypes.COLON; - } - // fall through - case 132: break; - case 17: - System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [141] { return PyTokenTypes.SPACE; }"); - { return PyTokenTypes.SPACE; - } - // fall through - case 133: break; - case 18: - System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [142] { return PyTokenTypes.TAB; }"); - { return PyTokenTypes.TAB; - } - // fall through - case 134: break; - case 19: - System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [143] { return PyTokenTypes.FORMFEED; }"); - { return PyTokenTypes.FORMFEED; - } - // fall through - case 135: break; - case 20: - System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [147] { if (zzCurrentPos == 0) yybegin(PENDING_DOCSTRING); return PyTokenTypes.LINE_BREAK; }"); + System.out.println("action [149] { if (zzCurrentPos == 0) yybegin(PENDING_DOCSTRING); return PyTokenTypes.LINE_BREAK; }"); { if (zzCurrentPos == 0) yybegin(PENDING_DOCSTRING); return PyTokenTypes.LINE_BREAK; } // fall through - case 136: break; - case 21: + case 130: break; + case 13: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [260] { return PyTokenTypes.SEMICOLON; }"); - { return PyTokenTypes.SEMICOLON; + System.out.println("action [249] { return PyTokenTypes.LPAR; }"); + { return PyTokenTypes.LPAR; + } + // fall through + case 131: break; + case 14: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [250] { return PyTokenTypes.RPAR; }"); + { return PyTokenTypes.RPAR; + } + // fall through + case 132: break; + case 15: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [251] { return PyTokenTypes.LBRACKET; }"); + { return PyTokenTypes.LBRACKET; + } + // fall through + case 133: break; + case 16: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [252] { return PyTokenTypes.RBRACKET; }"); + { return PyTokenTypes.RBRACKET; + } + // fall through + case 134: break; + case 17: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [257] { return PyTokenTypes.COLON; }"); + { return PyTokenTypes.COLON; + } + // fall through + case 135: break; + case 18: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [143] { return PyTokenTypes.SPACE; }"); + { return PyTokenTypes.SPACE; + } + // fall through + case 136: break; + case 19: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [144] { return PyTokenTypes.TAB; }"); + { return PyTokenTypes.TAB; } // fall through case 137: break; - case 22: + case 20: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [236] { return PyTokenTypes.PLUS; }"); - { return PyTokenTypes.PLUS; + System.out.println("action [145] { return PyTokenTypes.FORMFEED; }"); + { return PyTokenTypes.FORMFEED; } // fall through case 138: break; - case 23: + case 21: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [238] { return PyTokenTypes.MULT; }"); - { return PyTokenTypes.MULT; + System.out.println("action [262] { return PyTokenTypes.SEMICOLON; }"); + { return PyTokenTypes.SEMICOLON; } // fall through case 139: break; - case 24: + case 22: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [253] { return PyTokenTypes.AT; }"); - { return PyTokenTypes.AT; + System.out.println("action [238] { return PyTokenTypes.PLUS; }"); + { return PyTokenTypes.PLUS; } // fall through case 140: break; - case 25: + case 23: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [239] { return PyTokenTypes.DIV; }"); - { return PyTokenTypes.DIV; + System.out.println("action [240] { return PyTokenTypes.MULT; }"); + { return PyTokenTypes.MULT; } // fall through case 141: break; - case 26: + case 24: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [240] { return PyTokenTypes.PERC; }"); - { return PyTokenTypes.PERC; + System.out.println("action [255] { return PyTokenTypes.AT; }"); + { return PyTokenTypes.AT; } // fall through case 142: break; - case 27: + case 25: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [241] { return PyTokenTypes.AND; }"); - { return PyTokenTypes.AND; + System.out.println("action [241] { return PyTokenTypes.DIV; }"); + { return PyTokenTypes.DIV; } // fall through case 143: break; - case 28: + case 26: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [242] { return PyTokenTypes.OR; }"); - { return PyTokenTypes.OR; + System.out.println("action [242] { return PyTokenTypes.PERC; }"); + { return PyTokenTypes.PERC; } // fall through case 144: break; - case 29: + case 27: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [243] { return PyTokenTypes.XOR; }"); - { return PyTokenTypes.XOR; + System.out.println("action [243] { return PyTokenTypes.AND; }"); + { return PyTokenTypes.AND; } // fall through case 145: break; - case 30: + case 28: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [246] { return PyTokenTypes.GT; }"); - { return PyTokenTypes.GT; + System.out.println("action [244] { return PyTokenTypes.OR; }"); + { return PyTokenTypes.OR; } // fall through case 146: break; - case 31: + case 29: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [245] { return PyTokenTypes.LT; }"); - { return PyTokenTypes.LT; + System.out.println("action [245] { return PyTokenTypes.XOR; }"); + { return PyTokenTypes.XOR; } // fall through case 147: break; - case 32: + case 30: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [244] { return PyTokenTypes.TILDE; }"); - { return PyTokenTypes.TILDE; + System.out.println("action [248] { return PyTokenTypes.GT; }"); + { return PyTokenTypes.GT; } // fall through case 148: break; - case 33: + case 31: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [254] { return PyTokenTypes.COMMA; }"); - { return PyTokenTypes.COMMA; + System.out.println("action [247] { return PyTokenTypes.LT; }"); + { return PyTokenTypes.LT; } // fall through case 149: break; - case 34: + case 32: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [258] { return PyTokenTypes.TICK; }"); - { return PyTokenTypes.TICK; + System.out.println("action [246] { return PyTokenTypes.TILDE; }"); + { return PyTokenTypes.TILDE; } // fall through case 150: break; - case 35: + case 33: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [278] { yypushback(1); yybegin(YYINITIAL); }"); - { yypushback(1); yybegin(YYINITIAL); + System.out.println("action [256] { return PyTokenTypes.COMMA; }"); + { return PyTokenTypes.COMMA; } // fall through case 151: break; - case 36: + case 34: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [172] { return PyTokenTypes.END_OF_LINE_COMMENT; }"); - { return PyTokenTypes.END_OF_LINE_COMMENT; + System.out.println("action [260] { return PyTokenTypes.TICK; }"); + { return PyTokenTypes.TICK; } // fall through case 152: break; + case 35: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [280] { yypushback(1); yybegin(YYINITIAL); }"); + { yypushback(1); yybegin(YYINITIAL); + } + // fall through + case 153: break; + case 36: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [174] { return PyTokenTypes.END_OF_LINE_COMMENT; }"); + { return PyTokenTypes.END_OF_LINE_COMMENT; + } + // fall through + case 154: break; case 37: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [272] { if (zzInput == YYEOF) return PyTokenTypes.DOCSTRING;"+ZZ_NL+" else yybegin(YYINITIAL); return PyTokenTypes.SINGLE_QUOTED_STRING; }"); + System.out.println("action [274] { if (zzInput == YYEOF) return PyTokenTypes.DOCSTRING;"+ZZ_NL+" else yybegin(YYINITIAL); return PyTokenTypes.SINGLE_QUOTED_STRING; }"); { if (zzInput == YYEOF) return PyTokenTypes.DOCSTRING; else yybegin(YYINITIAL); return PyTokenTypes.SINGLE_QUOTED_STRING; } // fall through - case 153: break; + case 155: break; case 38: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [171] { return PyTokenTypes.LINE_BREAK; }"); + System.out.println("action [173] { return PyTokenTypes.LINE_BREAK; }"); { return PyTokenTypes.LINE_BREAK; } // fall through - case 154: break; + case 156: break; case 39: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [180] { return PyTokenTypes.SINGLE_QUOTED_STRING; }"); + System.out.println("action [182] { return PyTokenTypes.SINGLE_QUOTED_STRING; }"); { return PyTokenTypes.SINGLE_QUOTED_STRING; } // fall through - case 155: break; + case 157: break; case 40: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [106] { return PyTokenTypes.FSTRING_TEXT; }"); + System.out.println("action [104] { return PyTokenTypes.FSTRING_TEXT; }"); { return PyTokenTypes.FSTRING_TEXT; } // fall through - case 156: break; + case 158: break; case 41: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [107] { return fStringHelper.handleFStringEnd(); }"); + System.out.println("action [106] { return fStringHelper.handleFStringEnd(); }"); { return fStringHelper.handleFStringEnd(); } // fall through - case 157: break; + case 159: break; case 42: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [108] { return fStringHelper.handleFragmentStart(); }"); + System.out.println("action [107] { return fStringHelper.handleFragmentStart(); }"); { return fStringHelper.handleFragmentStart(); } // fall through - case 158: break; + case 160: break; case 43: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [125] { return fStringHelper.handleStringLiteral(PyTokenTypes.SINGLE_QUOTED_STRING); }"); - { return fStringHelper.handleStringLiteral(PyTokenTypes.SINGLE_QUOTED_STRING); - } - // fall through - case 159: break; - case 44: - System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [118] { return fStringHelper.handleLeftBracketInFragment(PyTokenTypes.LBRACE); }"); - { return fStringHelper.handleLeftBracketInFragment(PyTokenTypes.LBRACE); - } - // fall through - case 160: break; - case 45: - System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [119] { return fStringHelper.handleRightBracketInFragment(PyTokenTypes.RBRACE); }"); - { return fStringHelper.handleRightBracketInFragment(PyTokenTypes.RBRACE); + System.out.println("action [105] { return fStringHelper.handleLineBreakInLiteralText(); }"); + { return fStringHelper.handleLineBreakInLiteralText(); } // fall through case 161: break; - case 46: + case 44: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [121] { return PyTokenTypes.FSTRING_FRAGMENT_TYPE_CONVERSION; }"); - { return PyTokenTypes.FSTRING_FRAGMENT_TYPE_CONVERSION; + System.out.println("action [124] { return fStringHelper.handleStringLiteral(PyTokenTypes.SINGLE_QUOTED_STRING); }"); + { return fStringHelper.handleStringLiteral(PyTokenTypes.SINGLE_QUOTED_STRING); } // fall through case 162: break; - case 47: + case 45: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [112] { return fStringHelper.handleLeftBracketInFragment(PyTokenTypes.LPAR); }"); - { return fStringHelper.handleLeftBracketInFragment(PyTokenTypes.LPAR); + System.out.println("action [117] { return fStringHelper.handleLeftBracketInFragment(PyTokenTypes.LBRACE); }"); + { return fStringHelper.handleLeftBracketInFragment(PyTokenTypes.LBRACE); } // fall through case 163: break; - case 48: + case 46: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [113] { return fStringHelper.handleRightBracketInFragment(PyTokenTypes.RPAR); }"); - { return fStringHelper.handleRightBracketInFragment(PyTokenTypes.RPAR); + System.out.println("action [118] { return fStringHelper.handleRightBracketInFragment(PyTokenTypes.RBRACE); }"); + { return fStringHelper.handleRightBracketInFragment(PyTokenTypes.RBRACE); } // fall through case 164: break; - case 49: + case 47: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [115] { return fStringHelper.handleLeftBracketInFragment(PyTokenTypes.LBRACKET); }"); - { return fStringHelper.handleLeftBracketInFragment(PyTokenTypes.LBRACKET); + System.out.println("action [120] { return PyTokenTypes.FSTRING_FRAGMENT_TYPE_CONVERSION; }"); + { return PyTokenTypes.FSTRING_FRAGMENT_TYPE_CONVERSION; } // fall through case 165: break; - case 50: + case 48: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [116] { return fStringHelper.handleRightBracketInFragment(PyTokenTypes.RBRACKET); }"); - { return fStringHelper.handleRightBracketInFragment(PyTokenTypes.RBRACKET); + System.out.println("action [127] { return fStringHelper.handleLineBreakInFragment(); }"); + { return fStringHelper.handleLineBreakInFragment(); } // fall through case 166: break; - case 51: + case 49: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [123] { return fStringHelper.handleColonInFragment(); }"); - { return fStringHelper.handleColonInFragment(); + System.out.println("action [111] { return fStringHelper.handleLeftBracketInFragment(PyTokenTypes.LPAR); }"); + { return fStringHelper.handleLeftBracketInFragment(PyTokenTypes.LPAR); } // fall through case 167: break; - case 52: + case 50: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [135] { return fStringHelper.handleFragmentEnd(); }"); - { return fStringHelper.handleFragmentEnd(); + System.out.println("action [112] { return fStringHelper.handleRightBracketInFragment(PyTokenTypes.RPAR); }"); + { return fStringHelper.handleRightBracketInFragment(PyTokenTypes.RPAR); } // fall through case 168: break; - case 53: + case 51: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [177] { return PyTokenTypes.FLOAT_LITERAL; }"); - { return PyTokenTypes.FLOAT_LITERAL; + System.out.println("action [114] { return fStringHelper.handleLeftBracketInFragment(PyTokenTypes.LBRACKET); }"); + { return fStringHelper.handleLeftBracketInFragment(PyTokenTypes.LBRACKET); } // fall through case 169: break; - case 54: + case 52: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [178] { return PyTokenTypes.IMAGINARY_LITERAL; }"); - { return PyTokenTypes.IMAGINARY_LITERAL; + System.out.println("action [115] { return fStringHelper.handleRightBracketInFragment(PyTokenTypes.RBRACKET); }"); + { return fStringHelper.handleRightBracketInFragment(PyTokenTypes.RBRACKET); } // fall through case 170: break; - case 55: + case 53: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [214] { return PyTokenTypes.MINUSEQ; }"); - { return PyTokenTypes.MINUSEQ; + System.out.println("action [122] { return fStringHelper.handleColonInFragment(); }"); + { return fStringHelper.handleColonInFragment(); } // fall through case 171: break; - case 56: + case 54: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [235] { return PyTokenTypes.RARROW; }"); - { return PyTokenTypes.RARROW; + System.out.println("action [137] { return fStringHelper.handleFragmentEnd(); }"); + { return fStringHelper.handleFragmentEnd(); } // fall through case 172: break; + case 55: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [179] { return PyTokenTypes.FLOAT_LITERAL; }"); + { return PyTokenTypes.FLOAT_LITERAL; + } + // fall through + case 173: break; + case 56: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [180] { return PyTokenTypes.IMAGINARY_LITERAL; }"); + { return PyTokenTypes.IMAGINARY_LITERAL; + } + // fall through + case 174: break; case 57: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [155] { yypushback(getSpaceLength(yytext())); if (zzCurrentPos != 0) return PyTokenTypes.SINGLE_QUOTED_STRING;"+ZZ_NL+"return PyTokenTypes.DOCSTRING; }"); + System.out.println("action [216] { return PyTokenTypes.MINUSEQ; }"); + { return PyTokenTypes.MINUSEQ; + } + // fall through + case 175: break; + case 58: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [237] { return PyTokenTypes.RARROW; }"); + { return PyTokenTypes.RARROW; + } + // fall through + case 176: break; + case 59: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [157] { yypushback(getSpaceLength(yytext())); if (zzCurrentPos != 0) return PyTokenTypes.SINGLE_QUOTED_STRING;"+ZZ_NL+"return PyTokenTypes.DOCSTRING; }"); { yypushback(getSpaceLength(yytext())); if (zzCurrentPos != 0) return PyTokenTypes.SINGLE_QUOTED_STRING; return PyTokenTypes.DOCSTRING; } // fall through - case 173: break; - case 58: + case 177: break; + case 60: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [262] { return fStringHelper.handleFStringStart(); }"); + System.out.println("action [264] { return fStringHelper.handleFStringStart(); }"); { return fStringHelper.handleFStringStart(); } // fall through - case 174: break; - case 59: + case 178: break; + case 61: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [233] { return PyTokenTypes.NE; }"); + System.out.println("action [235] { return PyTokenTypes.NE; }"); { return PyTokenTypes.NE; } // fall through - case 175: break; - case 60: + case 179: break; + case 62: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [232] { return PyTokenTypes.EQEQ; }"); + System.out.println("action [234] { return PyTokenTypes.EQEQ; }"); { return PyTokenTypes.EQEQ; } // fall through - case 176: break; - case 61: + case 180: break; + case 63: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [203] { return PyTokenTypes.OR_KEYWORD; }"); + System.out.println("action [205] { return PyTokenTypes.OR_KEYWORD; }"); { return PyTokenTypes.OR_KEYWORD; } // fall through - case 177: break; - case 62: + case 181: break; + case 64: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [199] { return PyTokenTypes.IN_KEYWORD; }"); + System.out.println("action [201] { return PyTokenTypes.IN_KEYWORD; }"); { return PyTokenTypes.IN_KEYWORD; } // fall through - case 178: break; - case 63: + case 182: break; + case 65: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [200] { return PyTokenTypes.IS_KEYWORD; }"); + System.out.println("action [202] { return PyTokenTypes.IS_KEYWORD; }"); { return PyTokenTypes.IS_KEYWORD; } // fall through - case 179: break; - case 64: + case 183: break; + case 66: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [197] { return PyTokenTypes.IF_KEYWORD; }"); + System.out.println("action [199] { return PyTokenTypes.IF_KEYWORD; }"); { return PyTokenTypes.IF_KEYWORD; } // fall through - case 180: break; - case 65: + case 184: break; + case 67: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [213] { return PyTokenTypes.PLUSEQ; }"); + System.out.println("action [215] { return PyTokenTypes.PLUSEQ; }"); { return PyTokenTypes.PLUSEQ; } // fall through - case 181: break; - case 66: + case 185: break; + case 68: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [216] { return PyTokenTypes.MULTEQ; }"); + System.out.println("action [218] { return PyTokenTypes.MULTEQ; }"); { return PyTokenTypes.MULTEQ; } // fall through - case 182: break; - case 67: + case 186: break; + case 69: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [228] { return PyTokenTypes.EXP; }"); + System.out.println("action [230] { return PyTokenTypes.EXP; }"); { return PyTokenTypes.EXP; } // fall through - case 183: break; - case 68: + case 187: break; + case 70: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [217] { return PyTokenTypes.ATEQ; }"); + System.out.println("action [219] { return PyTokenTypes.ATEQ; }"); { return PyTokenTypes.ATEQ; } // fall through - case 184: break; - case 69: + case 188: break; + case 71: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [219] { return PyTokenTypes.DIVEQ; }"); + System.out.println("action [221] { return PyTokenTypes.DIVEQ; }"); { return PyTokenTypes.DIVEQ; } // fall through - case 185: break; - case 70: + case 189: break; + case 72: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [229] { return PyTokenTypes.FLOORDIV; }"); + System.out.println("action [231] { return PyTokenTypes.FLOORDIV; }"); { return PyTokenTypes.FLOORDIV; } // fall through - case 186: break; - case 71: + case 190: break; + case 73: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [220] { return PyTokenTypes.PERCEQ; }"); + System.out.println("action [222] { return PyTokenTypes.PERCEQ; }"); { return PyTokenTypes.PERCEQ; } // fall through - case 187: break; - case 72: + case 191: break; + case 74: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [221] { return PyTokenTypes.ANDEQ; }"); + System.out.println("action [223] { return PyTokenTypes.ANDEQ; }"); { return PyTokenTypes.ANDEQ; } // fall through - case 188: break; - case 73: + case 192: break; + case 75: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [222] { return PyTokenTypes.OREQ; }"); + System.out.println("action [224] { return PyTokenTypes.OREQ; }"); { return PyTokenTypes.OREQ; } // fall through - case 189: break; - case 74: + case 193: break; + case 76: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [223] { return PyTokenTypes.XOREQ; }"); + System.out.println("action [225] { return PyTokenTypes.XOREQ; }"); { return PyTokenTypes.XOREQ; } // fall through - case 190: break; - case 75: + case 194: break; + case 77: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [231] { return PyTokenTypes.GE; }"); + System.out.println("action [233] { return PyTokenTypes.GE; }"); { return PyTokenTypes.GE; } // fall through - case 191: break; - case 76: + case 195: break; + case 78: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [227] { return PyTokenTypes.GTGT; }"); + System.out.println("action [229] { return PyTokenTypes.GTGT; }"); { return PyTokenTypes.GTGT; } // fall through - case 192: break; - case 77: + case 196: break; + case 79: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [230] { return PyTokenTypes.LE; }"); + System.out.println("action [232] { return PyTokenTypes.LE; }"); { return PyTokenTypes.LE; } // fall through - case 193: break; - case 78: + case 197: break; + case 80: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [234] { return PyTokenTypes.NE_OLD; }"); + System.out.println("action [236] { return PyTokenTypes.NE_OLD; }"); { return PyTokenTypes.NE_OLD; } // fall through - case 194: break; - case 79: + case 198: break; + case 81: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [226] { return PyTokenTypes.LTLT; }"); + System.out.println("action [228] { return PyTokenTypes.LTLT; }"); { return PyTokenTypes.LTLT; } // fall through - case 195: break; - case 80: + case 199: break; + case 82: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [276] { yypushback(getSpaceLength(yytext())); yybegin(YYINITIAL); return PyTokenTypes.DOCSTRING; }"); + System.out.println("action [278] { yypushback(getSpaceLength(yytext())); yybegin(YYINITIAL); return PyTokenTypes.DOCSTRING; }"); { yypushback(getSpaceLength(yytext())); yybegin(YYINITIAL); return PyTokenTypes.DOCSTRING; } // fall through - case 196: break; - case 81: + case 200: break; + case 83: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [268] { yypushback(yylength()-1); yybegin(PENDING_DOCSTRING); return PyTokenTypes.COLON; }"); + System.out.println("action [270] { yypushback(yylength()-1); yybegin(PENDING_DOCSTRING); return PyTokenTypes.COLON; }"); { yypushback(yylength()-1); yybegin(PENDING_DOCSTRING); return PyTokenTypes.COLON; } // fall through - case 197: break; - case 82: + case 201: break; + case 84: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [152] { if (zzInput == YYEOF && zzStartRead == 0) return PyTokenTypes.DOCSTRING;"+ZZ_NL+" else return PyTokenTypes.TRIPLE_QUOTED_STRING; }"); + System.out.println("action [154] { if (zzInput == YYEOF && zzStartRead == 0) return PyTokenTypes.DOCSTRING;"+ZZ_NL+" else return PyTokenTypes.TRIPLE_QUOTED_STRING; }"); { if (zzInput == YYEOF && zzStartRead == 0) return PyTokenTypes.DOCSTRING; else return PyTokenTypes.TRIPLE_QUOTED_STRING; } // fall through - case 198: break; - case 83: + case 202: break; + case 85: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [161] { yypushback(getSpaceLength(yytext())); if (zzCurrentPos != 0) return PyTokenTypes.SINGLE_QUOTED_STRING;"+ZZ_NL+" yybegin(PENDING_DOCSTRING); return PyTokenTypes.DOCSTRING; }"); + System.out.println("action [163] { yypushback(getSpaceLength(yytext())); if (zzCurrentPos != 0) return PyTokenTypes.SINGLE_QUOTED_STRING;"+ZZ_NL+" yybegin(PENDING_DOCSTRING); return PyTokenTypes.DOCSTRING; }"); { yypushback(getSpaceLength(yytext())); if (zzCurrentPos != 0) return PyTokenTypes.SINGLE_QUOTED_STRING; yybegin(PENDING_DOCSTRING); return PyTokenTypes.DOCSTRING; } // fall through - case 199: break; - case 84: + case 203: break; + case 86: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [183] { return PyTokenTypes.AND_KEYWORD; }"); + System.out.println("action [185] { return PyTokenTypes.AND_KEYWORD; }"); { return PyTokenTypes.AND_KEYWORD; } // fall through - case 200: break; - case 85: + case 204: break; + case 87: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [202] { return PyTokenTypes.NOT_KEYWORD; }"); + System.out.println("action [204] { return PyTokenTypes.NOT_KEYWORD; }"); { return PyTokenTypes.NOT_KEYWORD; } // fall through - case 201: break; - case 86: + case 205: break; + case 88: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [189] { return PyTokenTypes.DEL_KEYWORD; }"); + System.out.println("action [191] { return PyTokenTypes.DEL_KEYWORD; }"); { return PyTokenTypes.DEL_KEYWORD; } // fall through - case 202: break; - case 87: + case 206: break; + case 89: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [188] { yybegin(IN_DOCSTRING_OWNER); return PyTokenTypes.DEF_KEYWORD; }"); + System.out.println("action [190] { yybegin(IN_DOCSTRING_OWNER); return PyTokenTypes.DEF_KEYWORD; }"); { yybegin(IN_DOCSTRING_OWNER); return PyTokenTypes.DEF_KEYWORD; } // fall through - case 203: break; - case 88: + case 207: break; + case 90: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [207] { return PyTokenTypes.TRY_KEYWORD; }"); + System.out.println("action [209] { return PyTokenTypes.TRY_KEYWORD; }"); { return PyTokenTypes.TRY_KEYWORD; } // fall through - case 204: break; - case 89: + case 208: break; + case 91: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [194] { return PyTokenTypes.FOR_KEYWORD; }"); + System.out.println("action [196] { return PyTokenTypes.FOR_KEYWORD; }"); { return PyTokenTypes.FOR_KEYWORD; } // fall through - case 205: break; - case 90: + case 209: break; + case 92: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [215] { return PyTokenTypes.EXPEQ; }"); + System.out.println("action [217] { return PyTokenTypes.EXPEQ; }"); { return PyTokenTypes.EXPEQ; } // fall through - case 206: break; - case 91: + case 210: break; + case 93: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [218] { return PyTokenTypes.FLOORDIVEQ; }"); + System.out.println("action [220] { return PyTokenTypes.FLOORDIVEQ; }"); { return PyTokenTypes.FLOORDIVEQ; } // fall through - case 207: break; - case 92: + case 211: break; + case 94: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [224] { return PyTokenTypes.GTGTEQ; }"); + System.out.println("action [226] { return PyTokenTypes.GTGTEQ; }"); { return PyTokenTypes.GTGTEQ; } // fall through - case 208: break; - case 93: + case 212: break; + case 95: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [225] { return PyTokenTypes.LTLTEQ; }"); + System.out.println("action [227] { return PyTokenTypes.LTLTEQ; }"); { return PyTokenTypes.LTLTEQ; } // fall through - case 209: break; - case 94: + case 213: break; + case 96: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [274] { if (zzInput == YYEOF) return PyTokenTypes.DOCSTRING;"+ZZ_NL+" else yybegin(YYINITIAL); return PyTokenTypes.TRIPLE_QUOTED_STRING; }"); + System.out.println("action [276] { if (zzInput == YYEOF) return PyTokenTypes.DOCSTRING;"+ZZ_NL+" else yybegin(YYINITIAL); return PyTokenTypes.TRIPLE_QUOTED_STRING; }"); { if (zzInput == YYEOF) return PyTokenTypes.DOCSTRING; else yybegin(YYINITIAL); return PyTokenTypes.TRIPLE_QUOTED_STRING; } // fall through - case 210: break; - case 95: + case 214: break; + case 97: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [277] { yypushback(getSpaceLength(yytext())); return PyTokenTypes.DOCSTRING; }"); + System.out.println("action [279] { yypushback(getSpaceLength(yytext())); return PyTokenTypes.DOCSTRING; }"); { yypushback(getSpaceLength(yytext())); return PyTokenTypes.DOCSTRING; } // fall through - case 211: break; - case 96: + case 215: break; + case 98: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [181] { return PyTokenTypes.TRIPLE_QUOTED_STRING; }"); + System.out.println("action [183] { return PyTokenTypes.TRIPLE_QUOTED_STRING; }"); { return PyTokenTypes.TRIPLE_QUOTED_STRING; } // fall through - case 212: break; - case 97: + case 216: break; + case 99: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [126] { return fStringHelper.handleStringLiteral(PyTokenTypes.TRIPLE_QUOTED_STRING); }"); + System.out.println("action [125] { return fStringHelper.handleStringLiteral(PyTokenTypes.TRIPLE_QUOTED_STRING); }"); { return fStringHelper.handleStringLiteral(PyTokenTypes.TRIPLE_QUOTED_STRING); } // fall through - case 213: break; - case 98: + case 217: break; + case 100: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [165] { yypushback(getSpaceLength(yytext())); if (zzCurrentPos != 0) return PyTokenTypes.TRIPLE_QUOTED_STRING;"+ZZ_NL+" yybegin(PENDING_DOCSTRING); return PyTokenTypes.DOCSTRING; }"); + System.out.println("action [167] { yypushback(getSpaceLength(yytext())); if (zzCurrentPos != 0) return PyTokenTypes.TRIPLE_QUOTED_STRING;"+ZZ_NL+" yybegin(PENDING_DOCSTRING); return PyTokenTypes.DOCSTRING; }"); { yypushback(getSpaceLength(yytext())); if (zzCurrentPos != 0) return PyTokenTypes.TRIPLE_QUOTED_STRING; yybegin(PENDING_DOCSTRING); return PyTokenTypes.DOCSTRING; } // fall through - case 214: break; - case 99: + case 218: break; + case 101: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [191] { return PyTokenTypes.ELSE_KEYWORD; }"); + System.out.println("action [193] { return PyTokenTypes.ELSE_KEYWORD; }"); { return PyTokenTypes.ELSE_KEYWORD; } // fall through - case 215: break; - case 100: + case 219: break; + case 102: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [190] { return PyTokenTypes.ELIF_KEYWORD; }"); + System.out.println("action [192] { return PyTokenTypes.ELIF_KEYWORD; }"); { return PyTokenTypes.ELIF_KEYWORD; } // fall through - case 216: break; - case 101: + case 220: break; + case 103: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [195] { return PyTokenTypes.FROM_KEYWORD; }"); + System.out.println("action [197] { return PyTokenTypes.FROM_KEYWORD; }"); { return PyTokenTypes.FROM_KEYWORD; } // fall through - case 217: break; - case 102: + case 221: break; + case 104: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [204] { return PyTokenTypes.PASS_KEYWORD; }"); + System.out.println("action [206] { return PyTokenTypes.PASS_KEYWORD; }"); { return PyTokenTypes.PASS_KEYWORD; } // fall through - case 218: break; - case 103: + case 222: break; + case 105: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [205] { return PyTokenTypes.RAISE_KEYWORD; }"); + System.out.println("action [207] { return PyTokenTypes.RAISE_KEYWORD; }"); { return PyTokenTypes.RAISE_KEYWORD; } // fall through - case 219: break; - case 104: + case 223: break; + case 106: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [185] { return PyTokenTypes.BREAK_KEYWORD; }"); + System.out.println("action [187] { return PyTokenTypes.BREAK_KEYWORD; }"); { return PyTokenTypes.BREAK_KEYWORD; } // fall through - case 220: break; - case 105: + case 224: break; + case 107: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [186] { yybegin(IN_DOCSTRING_OWNER); return PyTokenTypes.CLASS_KEYWORD; }"); + System.out.println("action [188] { yybegin(IN_DOCSTRING_OWNER); return PyTokenTypes.CLASS_KEYWORD; }"); { yybegin(IN_DOCSTRING_OWNER); return PyTokenTypes.CLASS_KEYWORD; } // fall through - case 221: break; - case 106: + case 225: break; + case 108: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [209] { return PyTokenTypes.YIELD_KEYWORD; }"); + System.out.println("action [211] { return PyTokenTypes.YIELD_KEYWORD; }"); { return PyTokenTypes.YIELD_KEYWORD; } // fall through - case 222: break; - case 107: + case 226: break; + case 109: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [208] { return PyTokenTypes.WHILE_KEYWORD; }"); + System.out.println("action [210] { return PyTokenTypes.WHILE_KEYWORD; }"); { return PyTokenTypes.WHILE_KEYWORD; } // fall through - case 223: break; - case 108: + case 227: break; + case 110: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [184] { return PyTokenTypes.ASSERT_KEYWORD; }"); + System.out.println("action [186] { return PyTokenTypes.ASSERT_KEYWORD; }"); { return PyTokenTypes.ASSERT_KEYWORD; } // fall through - case 224: break; - case 109: + case 228: break; + case 111: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [192] { return PyTokenTypes.EXCEPT_KEYWORD; }"); + System.out.println("action [194] { return PyTokenTypes.EXCEPT_KEYWORD; }"); { return PyTokenTypes.EXCEPT_KEYWORD; } // fall through - case 225: break; - case 110: + case 229: break; + case 112: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [206] { return PyTokenTypes.RETURN_KEYWORD; }"); + System.out.println("action [208] { return PyTokenTypes.RETURN_KEYWORD; }"); { return PyTokenTypes.RETURN_KEYWORD; } // fall through - case 226: break; - case 111: + case 230: break; + case 113: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [201] { return PyTokenTypes.LAMBDA_KEYWORD; }"); + System.out.println("action [203] { return PyTokenTypes.LAMBDA_KEYWORD; }"); { return PyTokenTypes.LAMBDA_KEYWORD; } // fall through - case 227: break; - case 112: + case 231: break; + case 114: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [198] { return PyTokenTypes.IMPORT_KEYWORD; }"); + System.out.println("action [200] { return PyTokenTypes.IMPORT_KEYWORD; }"); { return PyTokenTypes.IMPORT_KEYWORD; } // fall through - case 228: break; - case 113: + case 232: break; + case 115: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [196] { return PyTokenTypes.GLOBAL_KEYWORD; }"); + System.out.println("action [198] { return PyTokenTypes.GLOBAL_KEYWORD; }"); { return PyTokenTypes.GLOBAL_KEYWORD; } // fall through - case 229: break; - case 114: + case 233: break; + case 116: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [158] { yypushback(getSpaceLength(yytext())); if (zzCurrentPos != 0) return PyTokenTypes.TRIPLE_QUOTED_STRING;"+ZZ_NL+"return PyTokenTypes.DOCSTRING; }"); + System.out.println("action [160] { yypushback(getSpaceLength(yytext())); if (zzCurrentPos != 0) return PyTokenTypes.TRIPLE_QUOTED_STRING;"+ZZ_NL+"return PyTokenTypes.DOCSTRING; }"); { yypushback(getSpaceLength(yytext())); if (zzCurrentPos != 0) return PyTokenTypes.TRIPLE_QUOTED_STRING; return PyTokenTypes.DOCSTRING; } // fall through - case 230: break; - case 115: + case 234: break; + case 117: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [193] { return PyTokenTypes.FINALLY_KEYWORD; }"); + System.out.println("action [195] { return PyTokenTypes.FINALLY_KEYWORD; }"); { return PyTokenTypes.FINALLY_KEYWORD; } // fall through - case 231: break; - case 116: + case 235: break; + case 118: System.out.println("match: --"+zzToPrintable(yytext())+"--"); - System.out.println("action [187] { return PyTokenTypes.CONTINUE_KEYWORD; }"); + System.out.println("action [189] { return PyTokenTypes.CONTINUE_KEYWORD; }"); { return PyTokenTypes.CONTINUE_KEYWORD; } // fall through - case 232: break; + case 236: break; default: zzScanError(ZZ_NO_MATCH); } diff --git a/python/src/com/jetbrains/python/lexer/PyLexerFStringHelper.kt b/python/src/com/jetbrains/python/lexer/PyLexerFStringHelper.kt index 574770d1c6b1..a541fb888872 100644 --- a/python/src/com/jetbrains/python/lexer/PyLexerFStringHelper.kt +++ b/python/src/com/jetbrains/python/lexer/PyLexerFStringHelper.kt @@ -66,6 +66,22 @@ class PyLexerFStringHelper(private val myLexer: FlexLexerEx) { } } + fun handleLineBreakInFragment(): IElementType { + val text = myLexer.yytext().toString() + // We will return a line break anyway, but we need to transit from FSTRING state of the lexer + findFStringTerminator(text) + return PyTokenTypes.LINE_BREAK + } + + fun handleLineBreakInLiteralText(): IElementType { + val text = myLexer.yytext().toString() + val (_, offset) = findFStringTerminator(text) + if (offset == text.length) { + return PyTokenTypes.FSTRING_TEXT + } + return PyTokenTypes.LINE_BREAK + } + fun handleStringLiteral(stringLiteralType: IElementType): IElementType { val stringText = myLexer.yytext().toString() val prefixLength = PyStringLiteralUtil.getPrefixLength(stringText) @@ -86,20 +102,36 @@ class PyLexerFStringHelper(private val myLexer: FlexLexerEx) { i += 2 continue } - val nextThree = text.substring(i, Math.min(text.length, i + 3)) - for (j in myFStringStates.size - 1 downTo 0) { - val state = myFStringStates[j] - if (nextThree.startsWith(state.openingQuotes)) { + if (c == '\n') { + val firstSingleQuotedIndex = myFStringStates.indexOfFirst { it.openingQuotes.length == 1 } + if (firstSingleQuotedIndex >= 0) { if (i == 0) { - myFStringStates.subList(i, myFStringStates.size).clear() - myLexer.yybegin(state.oldState) - val unmatched = text.length - state.openingQuotes.length - myLexer.yypushback(unmatched) + myLexer.yybegin(myFStringStates[firstSingleQuotedIndex].oldState) + myFStringStates.subList(firstSingleQuotedIndex, myFStringStates.size).clear() + myLexer.yypushback(text.length - 1) } else { myLexer.yypushback(text.length - i) } - return Pair(PyTokenTypes.FSTRING_END, i) + return Pair(PyTokenTypes.LINE_BREAK, i) + } + } + else { + val nextThree = text.substring(i, Math.min(text.length, i + 3)) + for (j in myFStringStates.size - 1 downTo 0) { + val state = myFStringStates[j] + if (nextThree.startsWith(state.openingQuotes)) { + if (i == 0) { + myLexer.yybegin(state.oldState) + myFStringStates.subList(j, myFStringStates.size).clear() + val unmatched = text.length - state.openingQuotes.length + myLexer.yypushback(unmatched) + } + else { + myLexer.yypushback(text.length - i) + } + return Pair(PyTokenTypes.FSTRING_END, i) + } } } i++ diff --git a/python/src/com/jetbrains/python/lexer/Python.flex b/python/src/com/jetbrains/python/lexer/Python.flex index 0fecd381278e..157169f4e999 100644 --- a/python/src/com/jetbrains/python/lexer/Python.flex +++ b/python/src/com/jetbrains/python/lexer/Python.flex @@ -2,10 +2,8 @@ package com.jetbrains.python.lexer; import com.intellij.psi.tree.IElementType; -import com.intellij.util.containers.ContainerUtil;import com.jetbrains.python.PyTokenTypes; -import com.intellij.util.containers.Stack; +import com.jetbrains.python.PyTokenTypes; import com.intellij.openapi.util.text.StringUtil; -import com.jetbrains.python.psi.PyStringLiteralUtil; %% @@ -104,6 +102,7 @@ return yylength()-s.length(); { {FSTRING_TEXT_NO_QUOTES} { return PyTokenTypes.FSTRING_TEXT; } + [\n] { return fStringHelper.handleLineBreakInLiteralText(); } {FSTRING_QUOTES} { return fStringHelper.handleFStringEnd(); } "{" { return fStringHelper.handleFragmentStart(); } } @@ -124,6 +123,8 @@ return yylength()-s.length(); {SINGLE_QUOTED_STRING} { return fStringHelper.handleStringLiteral(PyTokenTypes.SINGLE_QUOTED_STRING); } {TRIPLE_QUOTED_LITERAL} { return fStringHelper.handleStringLiteral(PyTokenTypes.TRIPLE_QUOTED_STRING); } + + [\n] { return fStringHelper.handleLineBreakInFragment(); } // Should be impossible inside expression fragments: any openingQuotes should be matched as a string literal there // {FSTRING_QUOTES} { return hasMatchingFStringStart(yytext().toString()) ? PyTokenTypes.FSTRING_END : PyTokenTypes.FSTRING_TEXT; } @@ -131,10 +132,11 @@ return yylength()-s.length(); { {FSTRING_FORMAT_TEXT_NO_QUOTES} { return PyTokenTypes.FSTRING_TEXT; } + [\n] { return fStringHelper.handleLineBreakInLiteralText(); } "{" { return fStringHelper.handleFragmentStart(); } "}" { return fStringHelper.handleFragmentEnd(); } - // format part of a fragment can contain openingQuotes + // format part of a fragment can contain opening quotes {FSTRING_QUOTES} { return fStringHelper.handleFStringEnd(); } } diff --git a/python/testData/psi/FStringTerminatedByEscapedLineBreakInNestedStringLiteral.py b/python/testData/psi/FStringTerminatedByEscapedLineBreakInNestedStringLiteral.py new file mode 100644 index 000000000000..3fccdd33bc7d --- /dev/null +++ b/python/testData/psi/FStringTerminatedByEscapedLineBreakInNestedStringLiteral.py @@ -0,0 +1,2 @@ +s = f"{f'''{'\ +'}'''}" \ No newline at end of file diff --git a/python/testData/psi/FStringTerminatedByEscapedLineBreakInNestedStringLiteral.txt b/python/testData/psi/FStringTerminatedByEscapedLineBreakInNestedStringLiteral.txt new file mode 100644 index 000000000000..394cc8ba393f --- /dev/null +++ b/python/testData/psi/FStringTerminatedByEscapedLineBreakInNestedStringLiteral.txt @@ -0,0 +1,26 @@ +PyFile:FStringTerminatedByEscapedLineBreakInNestedStringLiteral.py + PyAssignmentStatement + PyTargetExpression: s + PsiElement(Py:IDENTIFIER)('s') + PsiWhiteSpace(' ') + PsiElement(Py:EQ)('=') + PsiWhiteSpace(' ') + PyStringLiteralExpression: {f'''{'\ +'}'''} + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('f"') + PyFStringFragment + PsiElement(Py:FSTRING_FRAGMENT_START)('{') + PyStringLiteralExpression: {'\ +'} + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('f'''') + PyFStringFragment + PsiElement(Py:FSTRING_FRAGMENT_START)('{') + PyStringLiteralExpression: + + PsiElement(Py:SINGLE_QUOTED_STRING)(''\\n'') + PsiElement(Py:FSTRING_FRAGMENT_END)('}') + PsiElement(Py:FSTRING_END)(''''') + PsiElement(Py:FSTRING_FRAGMENT_END)('}') + PsiElement(Py:FSTRING_END)('"') \ No newline at end of file diff --git a/python/testData/psi/FStringTerminatedByLineBreakInExpression.txt b/python/testData/psi/FStringTerminatedByLineBreakInExpression.txt new file mode 100644 index 000000000000..0efad4554150 --- /dev/null +++ b/python/testData/psi/FStringTerminatedByLineBreakInExpression.txt @@ -0,0 +1,33 @@ +PyFile:FStringTerminatedByLineBreakInExpression.py + PyAssignmentStatement + PyTargetExpression: s + PsiElement(Py:IDENTIFIER)('s') + PsiWhiteSpace(' ') + PsiElement(Py:EQ)('=') + PsiWhiteSpace(' ') + PyStringLiteralExpression: {1 + + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('f'') + PyFStringFragment + PsiElement(Py:FSTRING_FRAGMENT_START)('{') + PyBinaryExpression + PyNumericLiteralExpression + PsiElement(Py:INTEGER_LITERAL)('1') + PsiWhiteSpace(' ') + PsiElement(Py:PLUS)('+') + PsiErrorElement:expression expected + + PsiErrorElement:Unexpected f-string token + + PsiWhiteSpace('\n') + PyExpressionStatement + PyNumericLiteralExpression + PsiElement(Py:INTEGER_LITERAL)('2') + PsiErrorElement:End of statement expected + + PsiElement(Py:RBRACE)('}') + PsiErrorElement:Statement expected, found Py:RBRACE + + PyExpressionStatement + PyStringLiteralExpression: + PsiElement(Py:SINGLE_QUOTED_STRING)(''') \ No newline at end of file diff --git a/python/testData/psi/FStringTerminatedByLineBreakInExpressionInFormatPart.txt b/python/testData/psi/FStringTerminatedByLineBreakInExpressionInFormatPart.txt new file mode 100644 index 000000000000..86048e2686d9 --- /dev/null +++ b/python/testData/psi/FStringTerminatedByLineBreakInExpressionInFormatPart.txt @@ -0,0 +1,42 @@ +PyFile:FStringTerminatedByLineBreakInExpressionInFormatPart.py + PyAssignmentStatement + PyTargetExpression: s + PsiElement(Py:IDENTIFIER)('s') + PsiWhiteSpace(' ') + PsiElement(Py:EQ)('=') + PsiWhiteSpace(' ') + PyStringLiteralExpression: {42:{1 + + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('f'') + PyFStringFragment + PsiElement(Py:FSTRING_FRAGMENT_START)('{') + PyNumericLiteralExpression + PsiElement(Py:INTEGER_LITERAL)('42') + PyFStringFragmentFormatPart + PsiElement(Py:FSTRING_FRAGMENT_FORMAT_START)(':') + PyFStringFragment + PsiElement(Py:FSTRING_FRAGMENT_START)('{') + PyBinaryExpression + PyNumericLiteralExpression + PsiElement(Py:INTEGER_LITERAL)('1') + PsiWhiteSpace(' ') + PsiElement(Py:PLUS)('+') + PsiErrorElement:expression expected + + PsiErrorElement:Unexpected f-string token + + PsiWhiteSpace('\n') + PyExpressionStatement + PyNumericLiteralExpression + PsiElement(Py:INTEGER_LITERAL)('2') + PsiErrorElement:End of statement expected + + PsiElement(Py:RBRACE)('}') + PsiErrorElement:Statement expected, found Py:RBRACE + + PsiElement(Py:RBRACE)('}') + PsiErrorElement:Statement expected, found Py:RBRACE + + PyExpressionStatement + PyStringLiteralExpression: + PsiElement(Py:SINGLE_QUOTED_STRING)(''') \ No newline at end of file diff --git a/python/testData/psi/FStringTerminatedByLineBreakInFormatPart.txt b/python/testData/psi/FStringTerminatedByLineBreakInFormatPart.txt new file mode 100644 index 000000000000..d015114d8e1d --- /dev/null +++ b/python/testData/psi/FStringTerminatedByLineBreakInFormatPart.txt @@ -0,0 +1,34 @@ +PyFile:FStringTerminatedByLineBreakInFormatPart.py + PyAssignmentStatement + PyTargetExpression: s + PsiElement(Py:IDENTIFIER)('s') + PsiWhiteSpace(' ') + PsiElement(Py:EQ)('=') + PsiWhiteSpace(' ') + PyStringLiteralExpression: foo{42:bar + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('f'') + PsiElement(Py:FSTRING_TEXT)('foo') + PyFStringFragment + PsiElement(Py:FSTRING_FRAGMENT_START)('{') + PyNumericLiteralExpression + PsiElement(Py:INTEGER_LITERAL)('42') + PyFStringFragmentFormatPart + PsiElement(Py:FSTRING_FRAGMENT_FORMAT_START)(':') + PsiElement(Py:FSTRING_TEXT)('bar') + PsiErrorElement:} expected + + PsiErrorElement:Unexpected f-string token + + PsiWhiteSpace('\n') + PyExpressionStatement + PyReferenceExpression: baz + PsiElement(Py:IDENTIFIER)('baz') + PsiErrorElement:End of statement expected + + PsiElement(Py:RBRACE)('}') + PsiErrorElement:Statement expected, found Py:RBRACE + + PyExpressionStatement + PyStringLiteralExpression: + PsiElement(Py:SINGLE_QUOTED_STRING)(''') \ No newline at end of file diff --git a/python/testData/psi/FStringTerminatedByLineBreakInLiteralPart.txt b/python/testData/psi/FStringTerminatedByLineBreakInLiteralPart.txt new file mode 100644 index 000000000000..1c2e2fb4deff --- /dev/null +++ b/python/testData/psi/FStringTerminatedByLineBreakInLiteralPart.txt @@ -0,0 +1,22 @@ +PyFile:FStringTerminatedByLineBreakInLiteralPart.py + PyAssignmentStatement + PyTargetExpression: s + PsiElement(Py:IDENTIFIER)('s') + PsiWhiteSpace(' ') + PsiElement(Py:EQ)('=') + PsiWhiteSpace(' ') + PyStringLiteralExpression: foo + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('f'') + PsiElement(Py:FSTRING_TEXT)('foo') + PsiErrorElement:Unexpected f-string token + + PsiWhiteSpace('\n') + PyExpressionStatement + PyReferenceExpression: bar + PsiElement(Py:IDENTIFIER)('bar') + PsiErrorElement:End of statement expected + + PyExpressionStatement + PyStringLiteralExpression: + PsiElement(Py:SINGLE_QUOTED_STRING)(''') \ No newline at end of file diff --git a/python/testData/psi/FStringTerminatedByLineBreakInNestedExpression.txt b/python/testData/psi/FStringTerminatedByLineBreakInNestedExpression.txt new file mode 100644 index 000000000000..330c11d9cdc7 --- /dev/null +++ b/python/testData/psi/FStringTerminatedByLineBreakInNestedExpression.txt @@ -0,0 +1,40 @@ +PyFile:FStringTerminatedByLineBreakInNestedExpression.py + PyAssignmentStatement + PyTargetExpression: s + PsiElement(Py:IDENTIFIER)('s') + PsiWhiteSpace(' ') + PsiElement(Py:EQ)('=') + PsiWhiteSpace(' ') + PyStringLiteralExpression: {f'{1 + + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('f"') + PyFStringFragment + PsiElement(Py:FSTRING_FRAGMENT_START)('{') + PyStringLiteralExpression: {1 + + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('f'') + PyFStringFragment + PsiElement(Py:FSTRING_FRAGMENT_START)('{') + PyBinaryExpression + PyNumericLiteralExpression + PsiElement(Py:INTEGER_LITERAL)('1') + PsiWhiteSpace(' ') + PsiElement(Py:PLUS)('+') + PsiErrorElement:expression expected + + PsiErrorElement:Unexpected f-string token + + PsiErrorElement:Unexpected f-string token + + PsiWhiteSpace('\n') + PyExpressionStatement + PyNumericLiteralExpression + PsiElement(Py:INTEGER_LITERAL)('2') + PsiErrorElement:End of statement expected + + PsiElement(Py:RBRACE)('}') + PsiErrorElement:Statement expected, found Py:RBRACE + + PyExpressionStatement + PyStringLiteralExpression: }" + PsiElement(Py:SINGLE_QUOTED_STRING)(''}"') \ No newline at end of file diff --git a/python/testData/psi/FStringTerminatedByLineBreakInNestedExpressionInFormatPart.txt b/python/testData/psi/FStringTerminatedByLineBreakInNestedExpressionInFormatPart.txt new file mode 100644 index 000000000000..3b69eb2a21bd --- /dev/null +++ b/python/testData/psi/FStringTerminatedByLineBreakInNestedExpressionInFormatPart.txt @@ -0,0 +1,49 @@ +PyFile:FStringTerminatedByLineBreakInNestedExpressionInFormatPart.py + PyAssignmentStatement + PyTargetExpression: s + PsiElement(Py:IDENTIFIER)('s') + PsiWhiteSpace(' ') + PsiElement(Py:EQ)('=') + PsiWhiteSpace(' ') + PyStringLiteralExpression: {f'{42:{1 + + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('f"') + PyFStringFragment + PsiElement(Py:FSTRING_FRAGMENT_START)('{') + PyStringLiteralExpression: {42:{1 + + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('f'') + PyFStringFragment + PsiElement(Py:FSTRING_FRAGMENT_START)('{') + PyNumericLiteralExpression + PsiElement(Py:INTEGER_LITERAL)('42') + PyFStringFragmentFormatPart + PsiElement(Py:FSTRING_FRAGMENT_FORMAT_START)(':') + PyFStringFragment + PsiElement(Py:FSTRING_FRAGMENT_START)('{') + PyBinaryExpression + PyNumericLiteralExpression + PsiElement(Py:INTEGER_LITERAL)('1') + PsiWhiteSpace(' ') + PsiElement(Py:PLUS)('+') + PsiErrorElement:expression expected + + PsiErrorElement:Unexpected f-string token + + PsiErrorElement:Unexpected f-string token + + PsiWhiteSpace('\n') + PyExpressionStatement + PyNumericLiteralExpression + PsiElement(Py:INTEGER_LITERAL)('2') + PsiErrorElement:End of statement expected + + PsiElement(Py:RBRACE)('}') + PsiErrorElement:Statement expected, found Py:RBRACE + + PsiElement(Py:RBRACE)('}') + PsiErrorElement:Statement expected, found Py:RBRACE + + PyExpressionStatement + PyStringLiteralExpression: }" + PsiElement(Py:SINGLE_QUOTED_STRING)(''}"') \ No newline at end of file diff --git a/python/testData/psi/FStringTerminatedByLineBreakInNestedFormatPart.txt b/python/testData/psi/FStringTerminatedByLineBreakInNestedFormatPart.txt new file mode 100644 index 000000000000..a3f58946b4ea --- /dev/null +++ b/python/testData/psi/FStringTerminatedByLineBreakInNestedFormatPart.txt @@ -0,0 +1,41 @@ +PyFile:FStringTerminatedByLineBreakInNestedFormatPart.py + PyAssignmentStatement + PyTargetExpression: s + PsiElement(Py:IDENTIFIER)('s') + PsiWhiteSpace(' ') + PsiElement(Py:EQ)('=') + PsiWhiteSpace(' ') + PyStringLiteralExpression: {f'foo{42:bar + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('f"') + PyFStringFragment + PsiElement(Py:FSTRING_FRAGMENT_START)('{') + PyStringLiteralExpression: foo{42:bar + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('f'') + PsiElement(Py:FSTRING_TEXT)('foo') + PyFStringFragment + PsiElement(Py:FSTRING_FRAGMENT_START)('{') + PyNumericLiteralExpression + PsiElement(Py:INTEGER_LITERAL)('42') + PyFStringFragmentFormatPart + PsiElement(Py:FSTRING_FRAGMENT_FORMAT_START)(':') + PsiElement(Py:FSTRING_TEXT)('bar') + PsiErrorElement:} expected + + PsiErrorElement:Unexpected f-string token + + PsiErrorElement:Unexpected f-string token + + PsiWhiteSpace('\n') + PyExpressionStatement + PyReferenceExpression: baz + PsiElement(Py:IDENTIFIER)('baz') + PsiErrorElement:End of statement expected + + PsiElement(Py:RBRACE)('}') + PsiErrorElement:Statement expected, found Py:RBRACE + + PyExpressionStatement + PyStringLiteralExpression: }" + PsiElement(Py:SINGLE_QUOTED_STRING)(''}"') \ No newline at end of file diff --git a/python/testData/psi/FStringTerminatedByLineBreakInNestedLiteralPart.txt b/python/testData/psi/FStringTerminatedByLineBreakInNestedLiteralPart.txt new file mode 100644 index 000000000000..d8b0a2032e91 --- /dev/null +++ b/python/testData/psi/FStringTerminatedByLineBreakInNestedLiteralPart.txt @@ -0,0 +1,31 @@ +PyFile:FStringTerminatedByLineBreakInNestedLiteralPart.py + PyAssignmentStatement + PyTargetExpression: s + PsiElement(Py:IDENTIFIER)('s') + PsiWhiteSpace(' ') + PsiElement(Py:EQ)('=') + PsiWhiteSpace(' ') + PyStringLiteralExpression: {f'foo + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('f"') + PyFStringFragment + PsiElement(Py:FSTRING_FRAGMENT_START)('{') + PyStringLiteralExpression: foo + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('f'') + PsiElement(Py:FSTRING_TEXT)('foo') + PsiErrorElement:Unexpected f-string token + + PsiErrorElement:type conversion, : or } expected + + PsiErrorElement:Unexpected f-string token + + PsiWhiteSpace('\n') + PyExpressionStatement + PyReferenceExpression: bar + PsiElement(Py:IDENTIFIER)('bar') + PsiErrorElement:End of statement expected + + PyExpressionStatement + PyStringLiteralExpression: }" + PsiElement(Py:SINGLE_QUOTED_STRING)(''}"') \ No newline at end of file diff --git a/python/testData/psi/FStringTerminatedByLineBreakInNestedStringLiteral.py b/python/testData/psi/FStringTerminatedByLineBreakInNestedStringLiteral.py deleted file mode 100644 index 70f98792aea2..000000000000 --- a/python/testData/psi/FStringTerminatedByLineBreakInNestedStringLiteral.py +++ /dev/null @@ -1,2 +0,0 @@ -s = f"{f'{""" -"""}'}" \ No newline at end of file diff --git a/python/testData/psi/FStringTerminatedByLineBreakInNestedStringLiteralInFormatPart.py b/python/testData/psi/FStringTerminatedByLineBreakInNestedStringLiteralInFormatPart.py new file mode 100644 index 000000000000..350a130ba4b8 --- /dev/null +++ b/python/testData/psi/FStringTerminatedByLineBreakInNestedStringLiteralInFormatPart.py @@ -0,0 +1,2 @@ +s = f"{f'''{foo:{'\ +'}}'''}" \ No newline at end of file diff --git a/python/testData/psi/FStringTerminatedByLineBreakInNestedStringLiteralInFormatPart.txt b/python/testData/psi/FStringTerminatedByLineBreakInNestedStringLiteralInFormatPart.txt new file mode 100644 index 000000000000..8730e313c702 --- /dev/null +++ b/python/testData/psi/FStringTerminatedByLineBreakInNestedStringLiteralInFormatPart.txt @@ -0,0 +1,33 @@ +PyFile:FStringTerminatedByLineBreakInNestedStringLiteralInFormatPart.py + PyAssignmentStatement + PyTargetExpression: s + PsiElement(Py:IDENTIFIER)('s') + PsiWhiteSpace(' ') + PsiElement(Py:EQ)('=') + PsiWhiteSpace(' ') + PyStringLiteralExpression: {f'''{foo:{'\ +'}}'''} + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('f"') + PyFStringFragment + PsiElement(Py:FSTRING_FRAGMENT_START)('{') + PyStringLiteralExpression: {foo:{'\ +'}} + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('f'''') + PyFStringFragment + PsiElement(Py:FSTRING_FRAGMENT_START)('{') + PyReferenceExpression: foo + PsiElement(Py:IDENTIFIER)('foo') + PyFStringFragmentFormatPart + PsiElement(Py:FSTRING_FRAGMENT_FORMAT_START)(':') + PyFStringFragment + PsiElement(Py:FSTRING_FRAGMENT_START)('{') + PyStringLiteralExpression: + + PsiElement(Py:SINGLE_QUOTED_STRING)(''\\n'') + PsiElement(Py:FSTRING_FRAGMENT_END)('}') + PsiElement(Py:FSTRING_FRAGMENT_END)('}') + PsiElement(Py:FSTRING_END)(''''') + PsiElement(Py:FSTRING_FRAGMENT_END)('}') + PsiElement(Py:FSTRING_END)('"') \ No newline at end of file diff --git a/python/testData/psi/FStringTerminatedByLineBreakInStringLiteral.txt b/python/testData/psi/FStringTerminatedByLineBreakInStringLiteral.txt new file mode 100644 index 000000000000..632a7c94f180 --- /dev/null +++ b/python/testData/psi/FStringTerminatedByLineBreakInStringLiteral.txt @@ -0,0 +1,22 @@ +PyFile:FStringTerminatedByLineBreakInStringLiteral.py + PyAssignmentStatement + PyTargetExpression: s + PsiElement(Py:IDENTIFIER)('s') + PsiWhiteSpace(' ') + PsiElement(Py:EQ)('=') + PsiWhiteSpace(' ') + PyStringLiteralExpression: {""" + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('f'') + PyFStringFragment + PsiElement(Py:FSTRING_FRAGMENT_START)('{') + PyStringLiteralExpression: + PsiElement(Py:TRIPLE_QUOTED_STRING)('"""') + PsiErrorElement:type conversion, : or } expected + + PsiErrorElement:Unexpected f-string token + + PsiWhiteSpace('\n') + PyExpressionStatement + PyStringLiteralExpression: }' + PsiElement(Py:TRIPLE_QUOTED_STRING)('"""}'') \ No newline at end of file diff --git a/python/testData/psi/FStringTerminatedByLineBreakInStringLiteralInFormatPart.txt b/python/testData/psi/FStringTerminatedByLineBreakInStringLiteralInFormatPart.txt new file mode 100644 index 000000000000..8400595edfd2 --- /dev/null +++ b/python/testData/psi/FStringTerminatedByLineBreakInStringLiteralInFormatPart.txt @@ -0,0 +1,28 @@ +PyFile:FStringTerminatedByLineBreakInStringLiteralInFormatPart.py + PyAssignmentStatement + PyTargetExpression: s + PsiElement(Py:IDENTIFIER)('s') + PsiWhiteSpace(' ') + PsiElement(Py:EQ)('=') + PsiWhiteSpace(' ') + PyStringLiteralExpression: {foo:{""" + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('f'') + PyFStringFragment + PsiElement(Py:FSTRING_FRAGMENT_START)('{') + PyReferenceExpression: foo + PsiElement(Py:IDENTIFIER)('foo') + PyFStringFragmentFormatPart + PsiElement(Py:FSTRING_FRAGMENT_FORMAT_START)(':') + PyFStringFragment + PsiElement(Py:FSTRING_FRAGMENT_START)('{') + PyStringLiteralExpression: + PsiElement(Py:TRIPLE_QUOTED_STRING)('"""') + PsiErrorElement:type conversion, : or } expected + + PsiErrorElement:Unexpected f-string token + + PsiWhiteSpace('\n') + PyExpressionStatement + PyStringLiteralExpression: }}' + PsiElement(Py:TRIPLE_QUOTED_STRING)('"""}}'') \ No newline at end of file diff --git a/python/testData/psi/FStringTerminatedByLineBreakInStringLiteralInNestedFormatPart.py b/python/testData/psi/FStringTerminatedByLineBreakInStringLiteralInNestedFormatPart.py deleted file mode 100644 index d03e7bba2e97..000000000000 --- a/python/testData/psi/FStringTerminatedByLineBreakInStringLiteralInNestedFormatPart.py +++ /dev/null @@ -1,2 +0,0 @@ -s = f"{f'{foo:{""" -"""}}'}" \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PythonParsingTest.java b/python/testSrc/com/jetbrains/python/PythonParsingTest.java index cfa50e177872..7ca4915f82c6 100644 --- a/python/testSrc/com/jetbrains/python/PythonParsingTest.java +++ b/python/testSrc/com/jetbrains/python/PythonParsingTest.java @@ -680,7 +680,7 @@ public class PythonParsingTest extends ParsingTestCase { public void testFStringTerminatedByLineBreakInLiteralPart() { doTest(LanguageLevel.PYTHON36); } - + public void testFStringTerminatedByLineBreakInNestedLiteralPart() { doTest(LanguageLevel.PYTHON36); } @@ -688,7 +688,7 @@ public class PythonParsingTest extends ParsingTestCase { public void testFStringTerminatedByLineBreakInFormatPart() { doTest(LanguageLevel.PYTHON36); } - + public void testFStringTerminatedByLineBreakInNestedFormatPart() { doTest(LanguageLevel.PYTHON36); } @@ -713,7 +713,9 @@ public class PythonParsingTest extends ParsingTestCase { doTest(LanguageLevel.PYTHON36); } - public void testFStringTerminatedByLineBreakInNestedStringLiteral() { + // not possible to come up with such case without escaping: triple-quoted string inside + // two nested f-strings with different types of quotes + public void testFStringTerminatedByEscapedLineBreakInNestedStringLiteral() { doTest(LanguageLevel.PYTHON36); }