diff --git a/python/gen/com/jetbrains/python/lexer/_PythonLexer.java b/python/gen/com/jetbrains/python/lexer/_PythonLexer.java index 7fc78f5f3afe..a660f3e064d8 100644 --- a/python/gen/com/jetbrains/python/lexer/_PythonLexer.java +++ b/python/gen/com/jetbrains/python/lexer/_PythonLexer.java @@ -1,4 +1,4 @@ -/* The following code was generated by JFlex 1.7.0-SNAPSHOT tweaked for IntelliJ platform */ +/* The following code was generated by JFlex 1.7.0 tweaked for IntelliJ platform */ /* It's an automatically generated code. Do not modify it. */ package com.jetbrains.python.lexer; @@ -7,11 +7,12 @@ import com.intellij.lexer.FlexLexer; import com.intellij.psi.tree.IElementType; import com.jetbrains.python.PyTokenTypes; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.util.containers.Stack;import org.jetbrains.annotations.NonNls; /** * This class is a scanner generated by - * JFlex 1.7.0-SNAPSHOT + * JFlex 1.7.0 * from the specification file Python.flex */ class _PythonLexer implements FlexLexer { @@ -21,11 +22,15 @@ class _PythonLexer implements FlexLexer { /** initial size of the lookahead buffer */ private static final int ZZ_BUFFERSIZE = 16384; + private static final String ZZ_NL = System.getProperty("line.separator"); /** lexical states */ public static final int YYINITIAL = 0; public static final int PENDING_DOCSTRING = 2; public static final int IN_DOCSTRING_OWNER = 4; + public static final int FSTRING = 6; + public static final int FSTRING_FRAGMENT = 8; + public static final int FSTRING_FRAGMENT_FORMAT_PART = 10; /** * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l @@ -34,13 +39,13 @@ class _PythonLexer implements FlexLexer { * l is of the form l = 2*k, k a non negative integer */ private static final int ZZ_LEXSTATE[] = { - 0, 0, 1, 1, 2, 2 + 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5 }; /** * Translates characters to character classes * Chosen bits are [11, 6, 4] - * Total runtime size is 15040 bytes + * Total runtime size is 15680 bytes */ public static int ZZ_CMAP(int ch) { return ZZ_CMAP_A[(ZZ_CMAP_Y[(ZZ_CMAP_Z[ch>>10]<<6)|((ch>>4)&0x3f)]<<4)|(ch&0xf)]; @@ -50,126 +55,131 @@ class _PythonLexer implements FlexLexer { static final char ZZ_CMAP_Z[] = zzUnpackCMap( "\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1\14\6\15\1\16\23\15"+ "\1\17\1\15\1\20\1\21\12\15\1\22\10\12\1\23\1\24\1\25\1\26\1\27\1\30\1\31\1"+ - "\32\1\33\1\12\1\34\1\35\2\12\1\15\1\36\3\12\1\37\10\12\1\40\1\41\20\12\1\42"+ - "\2\12\1\43\4\12\1\44\1\45\1\46\3\12\1\47\1\50\1\51\3\12\51\15\1\52\3\15\1"+ - "\53\1\54\4\15\1\55\12\12\1\56\u02c1\12\1\57\277\12"); + "\32\1\33\1\34\1\35\1\36\2\12\1\15\1\37\3\12\1\40\10\12\1\41\1\42\5\15\1\43"+ + "\1\44\11\12\1\45\2\12\1\46\4\12\1\47\1\50\1\51\1\12\1\52\1\12\1\53\1\54\1"+ + "\55\3\12\51\15\1\56\3\15\1\57\1\60\4\15\1\61\12\12\1\62\u02c1\12\1\63\277"+ + "\12"); - /* The ZZ_CMAP_Y table has 3072 entries */ + /* The ZZ_CMAP_Y table has 3328 entries */ static final char ZZ_CMAP_Y[] = zzUnpackCMap( "\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\1\1\11\1\12\1\13\1\14\1\13\1\14\34"+ "\13\1\15\1\16\1\17\1\1\7\13\1\20\1\21\1\13\1\22\4\13\1\23\10\13\1\22\12\13"+ "\1\24\1\13\1\25\1\24\1\13\1\26\1\24\1\13\1\27\1\30\1\13\1\31\1\32\1\1\1\31"+ "\4\13\1\33\6\13\1\34\1\35\1\36\1\1\3\13\1\37\6\13\1\16\1\40\2\13\1\41\2\13"+ - "\1\42\1\1\1\13\1\43\4\1\1\13\1\44\2\1\1\45\7\13\1\46\1\24\1\34\1\47\1\35\1"+ - "\50\1\51\1\52\1\46\1\16\1\53\1\47\1\35\1\54\1\55\1\56\1\57\1\60\1\61\1\22"+ - "\1\35\1\62\1\63\1\64\1\46\1\65\1\66\1\47\1\35\1\62\1\67\1\70\1\46\1\71\1\72"+ - "\1\73\1\74\1\75\1\76\1\77\1\57\1\1\1\100\1\101\1\35\1\102\1\103\1\104\1\46"+ - "\1\1\1\105\1\101\1\35\1\106\1\103\1\107\1\46\1\110\1\105\1\101\1\13\1\37\1"+ - "\111\1\112\1\46\1\113\1\114\1\115\1\13\1\116\1\117\1\120\1\57\1\121\1\24\2"+ - "\13\1\31\1\122\1\123\2\1\1\124\1\125\1\126\1\127\1\130\1\131\2\1\1\64\1\132"+ - "\1\123\1\133\1\134\1\13\1\135\1\24\1\136\1\134\1\13\1\135\1\137\3\1\4\13\1"+ - "\123\4\13\1\140\2\13\1\141\2\13\1\142\24\13\1\143\1\144\2\13\1\143\2\13\1"+ - "\145\1\146\1\14\3\13\1\146\3\13\1\37\2\1\1\13\1\1\5\13\1\147\1\24\45\13\1"+ - "\150\1\13\1\24\1\31\4\13\1\151\1\152\1\153\1\44\1\13\1\44\1\13\1\154\1\153"+ - "\1\155\5\13\1\156\1\123\1\1\1\157\1\123\5\13\1\26\2\13\1\31\4\13\1\60\1\13"+ - "\1\122\2\43\1\57\1\13\1\42\1\44\2\13\1\43\1\13\1\160\1\123\2\1\1\13\1\43\3"+ - "\13\1\122\1\13\1\150\2\123\1\161\1\122\4\1\4\13\1\43\1\123\1\162\1\154\3\13"+ - "\1\40\3\13\1\154\3\13\1\26\1\163\1\40\1\13\1\42\5\1\1\164\1\13\1\165\17\13"+ - "\1\166\21\13\1\147\2\13\1\147\1\167\1\13\1\42\3\13\1\170\1\171\1\172\1\135"+ - "\1\171\2\1\1\173\1\174\1\64\1\175\1\1\1\176\1\1\1\135\3\1\2\13\1\64\1\177"+ - "\1\200\1\201\1\202\1\203\1\1\2\13\1\152\62\1\1\204\2\13\1\160\161\1\2\13\1"+ - "\122\2\13\1\122\10\13\1\205\1\154\2\13\1\141\3\13\1\206\1\174\1\13\1\207\4"+ - "\210\2\13\2\1\1\174\35\1\1\211\1\1\1\24\1\212\1\24\4\13\1\213\1\24\4\13\1"+ - "\142\1\214\1\13\1\42\1\24\4\13\1\122\1\1\1\13\1\31\3\1\1\13\40\1\133\13\1"+ - "\60\4\1\135\13\1\60\2\1\10\13\1\135\4\1\2\13\1\42\20\13\1\135\1\13\1\215\1"+ - "\1\3\13\1\216\7\13\1\16\1\1\1\217\1\220\5\13\1\221\1\13\1\42\1\26\3\1\1\217"+ - "\2\13\1\26\1\1\3\13\1\154\4\13\1\44\1\123\1\13\1\222\1\40\1\13\1\42\2\13\1"+ - "\154\1\13\1\135\4\13\1\223\1\123\1\13\1\224\3\13\1\207\1\42\1\123\1\13\1\115"+ - "\4\13\1\32\1\157\1\13\1\225\1\226\1\227\1\210\2\13\1\142\1\60\7\13\1\230\1"+ - "\123\72\13\1\154\1\13\1\231\2\13\1\43\20\1\26\13\1\42\6\13\1\160\2\1\1\207"+ - "\1\232\1\35\1\233\1\234\6\13\1\16\1\1\1\45\25\13\1\42\1\1\4\13\1\220\2\13"+ - "\1\26\2\1\1\43\1\13\1\1\1\13\1\235\1\236\2\1\1\136\7\13\1\135\1\1\1\123\1"+ - "\24\1\237\1\24\1\31\1\204\4\13\1\122\1\240\1\241\2\1\1\242\1\13\1\14\1\243"+ - "\2\42\2\1\7\13\1\31\4\1\3\13\1\44\7\1\1\244\10\1\1\13\1\135\3\13\2\64\1\1"+ - "\2\13\1\1\1\13\1\31\2\13\1\31\1\13\1\42\2\13\1\245\1\246\2\1\11\13\1\42\1"+ - "\123\5\1\2\13\1\26\3\13\1\154\11\1\23\13\1\207\1\13\1\60\1\26\11\1\1\247\2"+ - "\13\1\250\1\13\1\60\1\13\1\207\1\13\1\122\4\1\1\13\1\251\1\13\1\60\1\13\1"+ - "\160\4\1\3\13\1\252\4\1\1\253\1\254\1\13\1\255\2\1\1\13\1\135\1\13\1\135\2"+ - "\1\1\134\1\13\1\207\1\1\3\13\1\60\1\13\1\60\1\13\1\32\1\13\1\16\6\1\4\13\1"+ - "\152\3\1\3\13\1\32\3\13\1\32\60\1\4\13\1\207\1\1\1\57\1\174\3\13\1\31\1\1"+ - "\1\13\1\152\1\123\3\13\1\256\1\1\2\13\1\257\4\13\1\260\1\261\2\1\1\13\1\22"+ - "\1\13\1\26\4\1\1\262\1\27\1\152\3\13\1\31\1\123\1\34\1\47\1\35\1\62\1\67\1"+ - "\263\1\264\1\44\20\1\4\13\1\265\1\123\12\1\3\13\1\266\1\64\1\267\2\1\4\13"+ - "\1\270\1\123\2\1\3\13\1\26\1\123\3\1\1\13\1\102\1\43\1\123\26\1\4\13\1\123"+ - "\1\174\34\1\3\13\1\152\20\1\71\13\1\160\6\1\6\13\1\122\1\1\14\13\1\154\53"+ - "\1\2\13\1\122\75\1\44\13\1\207\33\1\43\13\1\152\1\13\1\122\1\123\6\1\1\13"+ - "\1\42\1\44\3\13\1\207\1\154\1\123\1\45\1\271\1\13\67\1\4\13\1\44\2\13\1\122"+ - "\1\174\1\13\6\1\1\16\77\1\6\13\1\31\1\135\1\152\1\272\114\1\1\273\1\274\1"+ - "\275\1\1\1\276\11\1\1\277\33\1\5\13\1\136\3\13\1\153\1\300\1\301\1\302\3\13"+ - "\1\303\1\304\1\13\1\305\1\306\1\101\24\13\1\266\1\13\1\101\1\142\1\13\1\142"+ - "\1\13\1\136\1\13\1\136\1\122\1\13\1\122\1\13\1\35\1\13\1\35\1\13\1\307\3\310"+ - "\40\1\3\13\1\231\2\13\1\135\1\311\1\175\1\162\1\24\25\1\14\13\1\44\1\207\122"+ - "\1\1\302\1\13\1\312\1\313\1\314\1\315\1\316\1\317\1\320\1\43\1\321\1\43\47"+ - "\1\1\13\1\160\1\13\1\160\1\13\1\160\47\1\55\13\1\207\2\1\103\13\1\44\15\13"+ - "\1\42\150\13\1\16\25\1\41\13\1\42\56\1\17\13\41\1"); + "\1\42\1\1\1\13\1\43\4\1\1\13\1\44\1\1\1\45\1\22\7\13\1\46\1\24\1\34\1\47\1"+ + "\35\1\50\1\51\1\52\1\46\1\16\1\53\1\47\1\35\1\54\1\55\1\56\1\57\1\60\1\61"+ + "\1\22\1\35\1\62\1\63\1\64\1\46\1\65\1\66\1\47\1\35\1\62\1\67\1\70\1\46\1\71"+ + "\1\72\1\73\1\74\1\75\1\76\1\77\1\57\1\1\1\100\1\101\1\35\1\102\1\103\1\104"+ + "\1\46\1\1\1\100\1\101\1\35\1\105\1\103\1\106\1\46\1\107\1\110\1\101\1\13\1"+ + "\37\1\111\1\112\1\46\1\113\1\114\1\115\1\13\1\116\1\117\1\120\1\57\1\121\1"+ + "\24\2\13\1\31\1\122\1\123\2\1\1\124\1\125\1\126\1\127\1\130\1\131\2\1\1\64"+ + "\1\132\1\123\1\133\1\134\1\13\1\135\1\24\1\136\1\134\1\13\1\135\1\137\3\1"+ + "\4\13\1\123\4\13\1\140\2\13\1\141\2\13\1\142\24\13\1\143\1\144\2\13\1\143"+ + "\2\13\1\145\1\146\1\14\3\13\1\146\3\13\1\37\2\1\1\13\1\1\5\13\1\147\1\24\45"+ + "\13\1\150\1\13\1\24\1\31\4\13\1\151\1\152\1\153\1\154\1\13\1\154\1\13\1\155"+ + "\1\153\1\156\5\13\1\157\1\123\1\1\1\160\1\123\5\13\1\26\2\13\1\31\4\13\1\60"+ + "\1\13\1\122\2\43\1\57\1\13\1\42\1\154\2\13\1\43\1\13\1\161\1\123\2\1\1\13"+ + "\1\43\3\13\1\122\1\13\1\150\2\123\1\162\1\122\4\1\4\13\1\43\1\123\1\163\1"+ + "\155\3\13\1\40\3\13\1\155\3\13\1\26\1\164\1\40\1\13\1\42\1\152\4\1\1\165\1"+ + "\13\1\166\17\13\1\167\21\13\1\147\2\13\1\147\1\170\1\13\1\42\3\13\1\171\1"+ + "\172\1\173\1\135\1\172\2\1\1\174\1\175\1\64\1\176\1\1\1\177\1\1\1\135\3\1"+ + "\2\13\1\64\1\200\1\201\1\202\1\203\1\204\1\1\2\13\1\152\62\1\1\205\2\13\1"+ + "\161\161\1\2\13\1\122\2\13\1\122\10\13\1\206\1\155\2\13\1\141\3\13\1\207\1"+ + "\175\1\13\1\210\4\211\2\13\2\1\1\175\35\1\1\212\1\1\1\24\1\213\1\24\4\13\1"+ + "\214\1\24\4\13\1\142\1\215\1\13\1\42\1\24\4\13\1\122\1\1\1\13\1\31\3\1\1\13"+ + "\40\1\133\13\1\60\4\1\135\13\1\60\2\1\10\13\1\135\4\1\2\13\1\42\20\13\1\135"+ + "\1\13\1\216\1\1\3\13\1\217\7\13\1\16\1\1\1\220\1\221\5\13\1\222\1\13\1\122"+ + "\1\26\3\1\1\220\2\13\1\26\1\1\3\13\1\155\4\13\1\60\1\123\1\13\1\223\1\40\1"+ + "\13\1\42\2\13\1\155\1\13\1\135\4\13\1\224\1\123\1\13\1\225\3\13\1\210\1\42"+ + "\1\123\1\13\1\115\4\13\1\32\1\160\1\13\1\226\1\227\1\230\1\211\2\13\1\142"+ + "\1\60\7\13\1\231\1\123\72\13\1\155\1\13\1\232\2\13\1\43\20\1\26\13\1\42\6"+ + "\13\1\161\2\1\1\210\1\233\1\35\1\234\1\235\6\13\1\16\1\1\1\236\25\13\1\42"+ + "\1\1\4\13\1\221\2\13\1\26\2\1\1\43\1\13\1\1\1\13\1\237\1\240\2\1\1\136\7\13"+ + "\1\135\1\1\1\123\1\24\1\241\1\24\1\31\1\205\4\13\1\122\1\242\1\243\2\1\1\244"+ + "\1\13\1\14\1\245\2\42\2\1\7\13\1\31\4\1\3\13\1\154\7\1\1\246\10\1\1\13\1\135"+ + "\3\13\2\64\1\1\2\13\1\1\1\13\1\31\2\13\1\31\1\13\1\42\2\13\1\247\1\250\2\1"+ + "\11\13\1\42\1\123\2\13\1\247\1\13\1\43\2\13\1\26\3\13\1\155\11\1\23\13\1\210"+ + "\1\13\1\60\1\26\11\1\1\251\2\13\1\252\1\13\1\60\1\13\1\210\1\13\1\122\4\1"+ + "\1\13\1\253\1\13\1\60\1\13\1\161\4\1\3\13\1\254\4\1\1\255\1\256\1\13\1\257"+ + "\2\1\1\13\1\135\1\13\1\135\2\1\1\134\1\13\1\210\1\1\3\13\1\60\1\13\1\60\1"+ + "\13\1\32\1\13\1\16\6\1\4\13\1\152\3\1\3\13\1\32\3\13\1\32\60\1\4\13\1\210"+ + "\1\1\1\57\1\175\3\13\1\31\1\1\1\13\1\152\1\123\3\13\1\260\1\1\2\13\1\261\4"+ + "\13\1\262\1\263\2\1\1\13\1\22\1\13\1\264\4\1\1\265\1\27\1\152\3\13\1\31\1"+ + "\123\1\34\1\47\1\35\1\62\1\67\1\266\1\267\1\154\10\1\4\13\1\31\1\123\2\1\4"+ + "\13\1\270\1\123\12\1\3\13\1\271\1\64\1\272\2\1\4\13\1\273\1\123\2\1\3\13\1"+ + "\26\1\123\3\1\1\13\1\102\1\43\1\123\26\1\4\13\1\123\1\175\34\1\3\13\1\152"+ + "\20\1\1\35\2\13\1\14\1\64\1\123\1\1\1\221\1\13\1\221\1\134\1\210\64\1\71\13"+ + "\1\161\6\1\6\13\1\122\1\1\14\13\1\155\53\1\2\13\1\122\75\1\44\13\1\210\33"+ + "\1\43\13\1\152\1\13\1\122\1\123\6\1\1\13\1\42\1\154\3\13\1\210\1\155\1\123"+ + "\1\236\1\274\1\13\67\1\4\13\1\154\2\13\1\122\1\175\1\13\4\1\1\64\1\1\76\13"+ + "\1\135\1\1\57\13\1\32\20\1\1\16\77\1\6\13\1\31\1\135\1\152\1\275\114\1\1\276"+ + "\1\277\1\300\1\1\1\301\11\1\1\302\33\1\5\13\1\136\3\13\1\153\1\303\1\304\1"+ + "\305\3\13\1\306\1\307\1\13\1\310\1\311\1\101\24\13\1\271\1\13\1\101\1\142"+ + "\1\13\1\142\1\13\1\136\1\13\1\136\1\122\1\13\1\122\1\13\1\35\1\13\1\35\1\13"+ + "\1\312\3\313\40\1\3\13\1\232\2\13\1\135\1\314\1\176\1\163\1\24\25\1\1\14\1"+ + "\222\1\315\75\1\14\13\1\154\1\210\2\1\4\13\1\31\1\123\112\1\1\305\1\13\1\316"+ + "\1\317\1\320\1\321\1\322\1\323\1\324\1\43\1\325\1\43\47\1\1\13\1\161\1\13"+ + "\1\161\1\13\1\161\47\1\55\13\1\210\2\1\103\13\1\154\15\13\1\42\150\13\1\16"+ + "\25\1\41\13\1\42\56\1\17\13\41\1"); - /* The ZZ_CMAP_A table has 3360 entries */ + /* The ZZ_CMAP_A table has 3424 entries */ static final char ZZ_CMAP_A[] = zzUnpackCMap( - "\11\0\1\31\1\33\1\111\1\32\1\14\22\0\1\30\1\76\1\27\1\13\1\0\1\70\1\71\1\25"+ - "\1\100\1\101\1\65\1\63\1\106\1\21\1\17\1\67\1\1\1\5\6\3\2\2\1\107\1\34\1\75"+ - "\1\64\1\74\1\0\1\66\1\4\1\11\1\23\1\4\1\20\1\23\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\102\1\26\1\103\1\73\1\7\1\110\1\35"+ - "\1\44\1\46\1\37\1\41\1\53\1\60\1\62\1\51\1\22\1\45\1\47\1\57\1\36\1\50\1\55"+ - "\1\15\1\42\1\40\1\43\1\52\1\15\1\61\1\54\1\56\1\15\1\104\1\72\1\105\1\77\6"+ - "\0\1\111\24\0\1\15\12\0\1\15\4\0\1\15\5\0\27\15\1\0\12\15\4\0\14\15\16\0\5"+ - "\15\7\0\1\15\1\0\1\15\1\0\5\15\1\0\2\15\2\0\4\15\1\0\1\15\6\0\1\15\1\0\3\15"+ - "\1\0\1\15\1\0\4\15\1\0\23\15\1\0\11\15\1\0\26\15\2\0\1\15\6\0\10\15\10\0\16"+ - "\15\1\0\1\15\1\0\2\15\1\0\2\15\1\0\1\15\10\0\13\15\5\0\3\15\15\0\12\16\4\0"+ - "\6\15\1\0\10\15\2\0\12\15\1\0\6\15\12\16\3\15\2\0\14\15\2\0\3\15\12\16\14"+ - "\15\4\0\1\15\5\0\16\15\2\0\14\15\4\0\5\15\16\0\21\15\2\0\12\16\1\15\2\0\16"+ - "\15\1\0\1\15\3\0\4\15\2\0\11\15\2\0\2\15\2\0\4\15\10\0\1\15\4\0\2\15\1\0\1"+ - "\15\1\0\3\15\1\0\6\15\4\0\2\15\1\0\2\15\1\0\2\15\1\0\2\15\2\0\1\15\1\0\5\15"+ - "\4\0\2\15\2\0\3\15\3\0\1\15\7\0\4\15\1\0\1\15\7\0\12\16\6\15\13\0\3\15\1\0"+ - "\11\15\1\0\2\15\1\0\2\15\1\0\5\15\2\0\12\15\1\0\3\15\1\0\3\15\2\0\1\15\30"+ - "\0\1\15\7\0\3\15\1\0\10\15\2\0\6\15\2\0\2\15\2\0\3\15\10\0\2\15\4\0\2\15\1"+ - "\0\1\15\1\0\1\15\20\0\2\15\1\0\6\15\3\0\3\15\1\0\4\15\3\0\2\15\1\0\1\15\1"+ - "\0\2\15\3\0\2\15\3\0\3\15\3\0\14\15\4\0\5\15\3\0\3\15\1\0\4\15\2\0\1\15\6"+ - "\0\1\15\10\0\4\15\1\0\10\15\1\0\3\15\1\0\30\15\3\0\10\15\1\0\3\15\1\0\4\15"+ - "\7\0\2\15\1\0\3\15\6\0\3\15\1\0\10\15\1\0\6\15\1\0\5\15\2\0\4\15\5\0\2\15"+ - "\7\0\1\15\2\0\2\15\15\0\5\15\1\0\3\15\1\0\5\15\10\0\1\15\7\0\1\15\12\0\6\15"+ - "\2\0\2\15\1\0\22\15\3\0\10\15\1\0\11\15\1\0\1\15\2\0\7\15\3\0\1\15\4\0\6\15"+ - "\1\0\1\15\1\0\10\15\2\0\2\15\14\0\17\15\1\0\12\16\7\0\2\15\1\0\1\15\2\0\2"+ - "\15\1\0\1\15\2\0\1\15\6\0\4\15\1\0\7\15\1\0\3\15\1\0\1\15\1\0\1\15\2\0\2\15"+ - "\1\0\15\15\1\0\3\15\2\0\5\15\1\0\1\15\1\0\6\15\2\0\12\16\2\0\4\15\10\0\2\15"+ - "\13\0\1\15\1\0\1\15\1\0\1\15\4\0\12\15\1\0\24\15\3\0\5\15\1\0\12\15\6\0\1"+ - "\15\11\0\12\16\4\15\2\0\6\15\1\0\1\15\5\0\1\15\2\0\13\15\1\0\15\15\1\0\4\15"+ - "\2\0\7\15\1\0\1\15\1\0\4\15\2\0\1\15\1\0\4\15\2\0\7\15\1\0\1\15\1\0\4\15\2"+ - "\0\16\15\2\0\6\15\2\0\15\15\2\0\14\15\3\0\13\15\7\0\15\15\1\0\6\15\14\0\1"+ - "\15\1\0\2\15\14\0\4\15\3\0\1\15\4\0\2\15\15\0\3\15\2\0\12\15\15\0\1\15\23"+ - "\0\5\15\12\16\3\0\6\15\1\0\23\15\1\0\2\15\6\0\6\15\6\0\14\15\1\0\1\15\1\0"+ - "\1\15\1\0\1\15\1\0\6\15\1\0\7\15\1\0\1\15\3\0\3\15\1\0\7\15\3\0\4\15\2\0\6"+ - "\15\14\0\2\111\25\0\1\15\4\0\1\15\14\0\1\15\15\0\1\15\2\0\1\15\4\0\1\15\2"+ - "\0\12\15\1\0\1\15\3\0\5\15\6\0\1\15\1\0\1\15\1\0\1\15\1\0\4\15\1\0\13\15\2"+ - "\0\4\15\5\0\5\15\4\0\1\15\7\0\17\15\6\0\15\15\7\0\10\15\11\0\7\15\1\0\7\15"+ - "\6\0\3\15\11\0\5\15\2\0\5\15\3\0\7\15\2\0\2\15\2\0\3\15\5\0\13\15\12\16\2"+ - "\15\4\0\3\15\1\0\12\15\1\0\1\15\7\0\11\15\2\0\27\15\2\0\15\15\3\0\1\15\1\0"+ - "\1\15\2\0\1\15\16\0\1\15\12\16\5\15\3\0\5\15\12\0\6\15\2\0\6\15\2\0\6\15\11"+ - "\0\13\15\1\0\2\15\2\0\7\15\4\0\5\15\3\0\5\15\5\0\12\15\1\0\5\15\1\0\1\15\1"+ - "\0\2\15\1\0\2\15\1\0\12\15\3\0\2\15\30\0\16\15\4\0\1\15\2\0\6\15\2\0\6\15"+ - "\2\0\6\15\2\0\3\15\3\0\14\15\1\0\16\15\1\0\2\15\1\0\1\15\15\0\1\15\2\0\4\15"+ - "\4\0\10\15\1\0\5\15\12\0\6\15\2\0\1\15\1\0\14\15\1\0\2\15\3\0\1\15\2\0\4\15"+ - "\1\0\2\15\12\0\10\15\6\0\6\15\1\0\2\15\5\0\10\15\1\0\3\15\1\0\13\15\4\0\3"+ - "\15\4\0\6\15\1\0\12\16\4\15\2\0\1\15\11\0\5\15\5\0\3\15\3\0\12\16\1\15\1\0"+ - "\1\15\3\0\7\15\1\0\1\15\1\0\4\15\1\0\2\15\6\0\1\15\5\0\7\15\2\0\7\15\3\0\6"+ - "\15\1\0\1\15\10\0\6\15\2\0\10\15\10\0\6\15\2\0\1\15\3\0\1\15\13\0\10\15\5"+ - "\0\15\15\3\0\2\15\6\0\5\15\3\0\6\15\10\0\10\15\2\0\7\15\16\0\4\15\4\0\3\15"+ - "\15\0\1\15\2\0\2\15\2\0\4\15\1\0\14\15\1\0\1\15\1\0\7\15\1\0\21\15\1\0\4\15"+ - "\2\0\10\15\1\0\7\15\1\0\14\15\1\0\4\15\1\0\5\15\1\0\1\15\3\0\11\15\1\0\10"+ - "\15\2\0\22\16\5\0\1\15\13\0\2\15\1\0\1\15\2\0\1\15\1\0\12\15\1\0\4\15\1\0"+ - "\1\15\1\0\1\15\6\0\1\15\4\0\1\15\1\0\1\15\1\0\1\15\1\0\3\15\1\0\2\15\1\0\1"+ - "\15\2\0\1\15\1\0\1\15\1\0\1\15\1\0\1\15\1\0\1\15\1\0\2\15\1\0\1\15\2\0\4\15"+ - "\1\0\7\15\1\0\4\15\1\0\4\15\1\0\1\15\1\0\12\15\1\0\5\15\1\0\3\15\1\0\5\15"+ - "\1\0\5\15"); + "\11\0\1\41\1\43\1\112\1\42\1\14\22\0\1\40\1\32\1\27\1\13\1\0\1\75\1\76\1\25"+ + "\1\104\1\105\1\72\1\70\1\110\1\21\1\17\1\74\1\1\1\5\6\3\2\2\1\36\1\44\1\102"+ + "\1\71\1\101\1\0\1\73\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\106\1\26\1\107\1\100\1\7\1\111\1"+ + "\33\1\51\1\53\1\46\1\47\1\60\1\65\1\67\1\56\1\22\1\52\1\54\1\64\1\45\1\55"+ + "\1\62\1\15\1\35\1\34\1\50\1\57\1\15\1\66\1\61\1\63\1\15\1\31\1\77\1\37\1\103"+ + "\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\16\0"+ + "\5\15\7\0\1\15\1\0\1\15\1\0\5\15\1\0\2\15\2\0\4\15\1\0\1\15\6\0\1\15\1\0\3"+ + "\15\1\0\1\15\1\0\4\15\1\0\23\15\1\0\11\15\1\0\26\15\2\0\1\15\6\0\10\15\10"+ + "\0\16\15\1\0\1\15\1\0\2\15\1\0\2\15\1\0\1\15\10\0\13\15\5\0\3\15\15\0\12\16"+ + "\4\0\6\15\1\0\10\15\2\0\12\15\1\0\6\15\12\16\3\15\2\0\14\15\2\0\3\15\12\16"+ + "\14\15\4\0\1\15\5\0\16\15\2\0\14\15\4\0\5\15\1\0\10\15\6\0\20\15\2\0\12\16"+ + "\1\15\2\0\16\15\1\0\1\15\3\0\4\15\2\0\11\15\2\0\2\15\2\0\4\15\10\0\1\15\4"+ + "\0\2\15\1\0\1\15\1\0\3\15\1\0\6\15\4\0\2\15\1\0\2\15\1\0\2\15\1\0\2\15\2\0"+ + "\1\15\1\0\5\15\4\0\2\15\2\0\3\15\3\0\1\15\7\0\4\15\1\0\1\15\7\0\12\16\6\15"+ + "\13\0\3\15\1\0\11\15\1\0\2\15\1\0\2\15\1\0\5\15\2\0\12\15\1\0\3\15\1\0\3\15"+ + "\2\0\1\15\30\0\1\15\7\0\3\15\1\0\10\15\2\0\6\15\2\0\2\15\2\0\3\15\10\0\2\15"+ + "\4\0\2\15\1\0\1\15\1\0\1\15\20\0\2\15\1\0\6\15\3\0\3\15\1\0\4\15\3\0\2\15"+ + "\1\0\1\15\1\0\2\15\3\0\2\15\3\0\3\15\3\0\14\15\4\0\5\15\3\0\3\15\1\0\4\15"+ + "\2\0\1\15\6\0\1\15\10\0\4\15\1\0\10\15\1\0\3\15\1\0\30\15\3\0\10\15\1\0\3"+ + "\15\1\0\4\15\7\0\2\15\1\0\3\15\5\0\4\15\1\0\5\15\2\0\4\15\5\0\2\15\7\0\1\15"+ + "\2\0\2\15\16\0\3\15\1\0\10\15\1\0\7\15\1\0\3\15\1\0\5\15\5\0\4\15\7\0\1\15"+ + "\12\0\6\15\2\0\2\15\1\0\22\15\3\0\10\15\1\0\11\15\1\0\1\15\2\0\7\15\3\0\1"+ + "\15\4\0\6\15\1\0\1\15\1\0\10\15\2\0\2\15\14\0\17\15\1\0\12\16\7\0\2\15\1\0"+ + "\1\15\2\0\2\15\1\0\1\15\2\0\1\15\6\0\4\15\1\0\7\15\1\0\3\15\1\0\1\15\1\0\1"+ + "\15\2\0\2\15\1\0\15\15\1\0\3\15\2\0\5\15\1\0\1\15\1\0\6\15\2\0\12\16\2\0\4"+ + "\15\10\0\2\15\13\0\1\15\1\0\1\15\1\0\1\15\4\0\12\15\1\0\24\15\3\0\5\15\1\0"+ + "\12\15\6\0\1\15\11\0\12\16\4\15\2\0\6\15\1\0\1\15\5\0\1\15\2\0\13\15\1\0\15"+ + "\15\1\0\4\15\2\0\7\15\1\0\1\15\1\0\4\15\2\0\1\15\1\0\4\15\2\0\7\15\1\0\1\15"+ + "\1\0\4\15\2\0\16\15\2\0\6\15\2\0\15\15\2\0\14\15\3\0\13\15\7\0\15\15\1\0\7"+ + "\15\13\0\4\15\14\0\1\15\1\0\2\15\14\0\4\15\3\0\1\15\4\0\2\15\15\0\3\15\2\0"+ + "\12\15\15\0\1\15\23\0\5\15\12\16\3\0\6\15\1\0\23\15\1\0\2\15\6\0\6\15\5\0"+ + "\15\15\1\0\1\15\1\0\1\15\1\0\1\15\1\0\6\15\1\0\7\15\1\0\1\15\3\0\3\15\1\0"+ + "\7\15\3\0\4\15\2\0\6\15\14\0\2\112\25\0\1\15\4\0\1\15\14\0\1\15\15\0\1\15"+ + "\2\0\1\15\4\0\1\15\2\0\12\15\1\0\1\15\3\0\5\15\6\0\1\15\1\0\1\15\1\0\1\15"+ + "\1\0\4\15\1\0\13\15\2\0\4\15\5\0\5\15\4\0\1\15\7\0\17\15\6\0\15\15\7\0\10"+ + "\15\11\0\7\15\1\0\7\15\6\0\3\15\11\0\5\15\2\0\5\15\3\0\7\15\2\0\2\15\2\0\3"+ + "\15\5\0\13\15\12\16\2\15\4\0\3\15\1\0\12\15\1\0\1\15\7\0\11\15\2\0\27\15\2"+ + "\0\15\15\3\0\1\15\1\0\1\15\2\0\1\15\16\0\1\15\12\16\5\15\3\0\5\15\12\0\6\15"+ + "\2\0\6\15\2\0\6\15\11\0\13\15\1\0\2\15\2\0\7\15\4\0\5\15\3\0\5\15\5\0\12\15"+ + "\1\0\5\15\1\0\1\15\1\0\2\15\1\0\2\15\1\0\12\15\3\0\15\15\3\0\2\15\30\0\16"+ + "\15\4\0\1\15\2\0\6\15\2\0\6\15\2\0\6\15\2\0\3\15\3\0\14\15\1\0\16\15\1\0\2"+ + "\15\1\0\1\15\15\0\1\15\2\0\4\15\4\0\10\15\1\0\5\15\12\0\6\15\2\0\1\15\1\0"+ + "\14\15\1\0\2\15\3\0\1\15\2\0\4\15\1\0\2\15\12\0\10\15\6\0\6\15\1\0\2\15\5"+ + "\0\10\15\1\0\3\15\1\0\13\15\4\0\3\15\4\0\6\15\1\0\12\16\4\15\2\0\1\15\11\0"+ + "\5\15\5\0\3\15\3\0\12\16\1\15\1\0\1\15\3\0\10\15\6\0\1\15\1\0\7\15\1\0\1\15"+ + "\1\0\4\15\1\0\2\15\6\0\1\15\5\0\7\15\2\0\7\15\3\0\6\15\1\0\1\15\10\0\6\15"+ + "\2\0\10\15\10\0\6\15\2\0\1\15\3\0\1\15\13\0\10\15\5\0\15\15\3\0\2\15\6\0\5"+ + "\15\3\0\6\15\10\0\10\15\2\0\7\15\16\0\4\15\4\0\3\15\15\0\1\15\2\0\2\15\2\0"+ + "\4\15\1\0\14\15\1\0\1\15\1\0\7\15\1\0\21\15\1\0\4\15\2\0\10\15\1\0\7\15\1"+ + "\0\14\15\1\0\4\15\1\0\5\15\1\0\1\15\3\0\11\15\1\0\10\15\2\0\22\16\5\0\1\15"+ + "\12\0\2\15\1\0\2\15\1\0\5\15\6\0\2\15\1\0\1\15\2\0\1\15\1\0\12\15\1\0\4\15"+ + "\1\0\1\15\1\0\1\15\6\0\1\15\4\0\1\15\1\0\1\15\1\0\1\15\1\0\3\15\1\0\2\15\1"+ + "\0\1\15\2\0\1\15\1\0\1\15\1\0\1\15\1\0\1\15\1\0\1\15\1\0\2\15\1\0\1\15\2\0"+ + "\4\15\1\0\7\15\1\0\4\15\1\0\4\15\1\0\1\15\1\0\12\15\1\0\5\15\1\0\3\15\1\0"+ + "\5\15\1\0\5\15"); /** * Translates DFA states to action switch labels. @@ -177,31 +187,34 @@ class _PythonLexer implements FlexLexer { private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = - "\3\0\1\1\2\2\2\3\1\4\1\5\1\6\1\7"+ - "\1\10\1\7\1\11\1\12\1\13\1\14\1\15\20\3"+ - "\1\16\1\17\1\20\1\21\1\22\1\23\1\24\1\25"+ - "\1\26\1\27\1\30\1\1\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\4\3\1\41\1\2\5\0"+ - "\1\2\1\50\1\0\1\51\1\0\1\3\1\50\1\52"+ - "\1\53\3\7\1\54\3\7\15\3\1\55\1\56\1\57"+ - "\1\60\10\3\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\76"+ - "\1\77\1\100\1\101\1\0\3\45\1\102\3\45\1\3"+ - "\6\47\2\3\2\0\1\103\1\0\1\2\1\0\1\2"+ - "\1\0\1\2\1\0\1\50\1\0\1\3\1\0\1\7"+ - "\1\104\1\105\1\0\1\104\1\106\1\3\1\107\1\110"+ - "\1\111\5\3\1\112\6\3\1\113\5\3\1\114\1\115"+ - "\1\116\1\117\1\0\1\45\1\120\1\121\1\0\1\120"+ - "\1\3\1\47\2\122\1\0\2\123\1\0\1\3\1\124"+ - "\1\125\10\3\1\126\1\3\1\127\3\3\1\0\2\121"+ - "\11\0\2\3\1\130\1\3\1\131\1\132\4\3\1\133"+ - "\1\3\1\134\6\0\1\104\1\135\1\136\1\137\1\3"+ - "\1\140\1\141\1\3\1\142\1\120\1\122\1\123\1\0"+ - "\1\143\1\3\1\144\1\145"; + "\6\0\1\1\2\2\2\3\1\4\1\5\1\6\1\7"+ + "\1\10\1\7\1\3\1\11\1\1\2\3\1\12\1\13"+ + "\1\14\1\15\1\16\1\17\1\20\16\3\1\21\1\22"+ + "\1\23\1\24\1\25\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\3\1\12"+ + "\2\3\2\50\1\51\1\10\1\52\1\14\1\15\1\16"+ + "\1\53\1\54\1\2\5\0\1\2\1\55\1\0\1\56"+ + "\1\0\1\3\1\55\1\57\1\60\3\7\1\61\3\7"+ + "\1\3\2\62\1\63\15\3\1\64\1\65\1\66\1\67"+ + "\10\3\1\70\1\71\1\72\1\73\1\74\1\75\1\76"+ + "\1\77\1\100\1\101\1\102\1\103\1\104\1\105\1\106"+ + "\1\107\1\0\3\45\1\110\3\45\1\3\6\47\2\0"+ + "\1\111\1\3\2\0\2\44\2\0\1\2\1\0\1\2"+ + "\1\0\1\2\1\0\1\55\1\0\1\3\1\0\1\7"+ + "\1\112\1\113\1\0\1\112\1\3\2\0\1\3\1\114"+ + "\2\3\1\115\1\116\1\117\3\3\1\120\6\3\1\121"+ + "\5\3\1\122\1\123\1\124\1\125\1\0\1\45\1\126"+ + "\1\127\1\0\1\126\1\3\1\47\2\130\1\51\1\0"+ + "\2\131\1\0\1\3\1\62\3\3\1\132\1\133\6\3"+ + "\1\134\1\3\1\135\3\3\1\0\2\127\11\0\1\3"+ + "\1\136\2\3\1\137\1\140\4\3\1\141\1\3\1\142"+ + "\6\0\1\112\1\143\1\144\1\145\1\3\1\146\1\147"+ + "\1\3\1\150\1\126\1\130\1\131\1\0\1\151\1\3"+ + "\1\152\1\153"; private static int [] zzUnpackAction() { - int [] result = new int[277]; + int [] result = new int[303]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -226,44 +239,47 @@ class _PythonLexer implements FlexLexer { private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\112\0\224\0\336\0\u0128\0\u0172\0\u01bc\0\u0206"+ - "\0\u0250\0\u029a\0\u02e4\0\u032e\0\336\0\u0378\0\336\0\336"+ - "\0\336\0\336\0\336\0\u03c2\0\u040c\0\u0456\0\u04a0\0\u04ea"+ - "\0\u0534\0\u057e\0\u05c8\0\u0612\0\u065c\0\u06a6\0\u06f0\0\u073a"+ - "\0\u0784\0\u07ce\0\u0818\0\u0862\0\u08ac\0\u08f6\0\u0940\0\u098a"+ - "\0\u09d4\0\u0a1e\0\u0a68\0\u0ab2\0\u0afc\0\u0b46\0\u0b90\0\336"+ - "\0\336\0\336\0\336\0\336\0\336\0\336\0\336\0\336"+ - "\0\336\0\336\0\u0bda\0\u0c24\0\u0c6e\0\u0cb8\0\336\0\u0d02"+ - "\0\u0d4c\0\u0d96\0\u0de0\0\u0e2a\0\u0e74\0\u0ebe\0\u0f08\0\u0f52"+ - "\0\u0f9c\0\u0fe6\0\u1030\0\u107a\0\u10c4\0\336\0\u110e\0\u1158"+ - "\0\336\0\u11a2\0\u11ec\0\u1236\0\336\0\336\0\u1280\0\u12ca"+ - "\0\u1314\0\336\0\u135e\0\u13a8\0\u13f2\0\u143c\0\u1486\0\u14d0"+ - "\0\u151a\0\u1564\0\u15ae\0\u15f8\0\u1642\0\u168c\0\u16d6\0\u1720"+ - "\0\u176a\0\u17b4\0\u01bc\0\u01bc\0\u01bc\0\u01bc\0\u17fe\0\u1848"+ - "\0\u1892\0\u18dc\0\u1926\0\u1970\0\u19ba\0\u1a04\0\336\0\336"+ - "\0\336\0\u1a4e\0\336\0\336\0\u1a98\0\336\0\336\0\336"+ - "\0\336\0\336\0\u1ae2\0\336\0\336\0\u1b2c\0\336\0\u1b76"+ - "\0\u1bc0\0\u1c0a\0\u1c54\0\336\0\u1c9e\0\u1ce8\0\u1d32\0\u1d7c"+ - "\0\u1dc6\0\u1e10\0\u1e5a\0\u1ea4\0\u1eee\0\u1f38\0\u1f82\0\u1fcc"+ - "\0\u2016\0\u0f08\0\336\0\u2060\0\u20aa\0\u20f4\0\u213e\0\u2188"+ - "\0\u21d2\0\u221c\0\u2266\0\u22b0\0\u22fa\0\u029a\0\u2344\0\u238e"+ - "\0\336\0\u2344\0\u23d8\0\u01bc\0\u2422\0\u01bc\0\u01bc\0\u01bc"+ - "\0\u246c\0\u24b6\0\u2500\0\u254a\0\u2594\0\u01bc\0\u25de\0\u2628"+ - "\0\u2672\0\u26bc\0\u2706\0\u2750\0\u01bc\0\u279a\0\u27e4\0\u282e"+ - "\0\u2878\0\u28c2\0\336\0\336\0\336\0\336\0\u290c\0\u2956"+ - "\0\u29a0\0\336\0\u2956\0\u29ea\0\u2a34\0\336\0\u2a7e\0\u2ac8"+ - "\0\u2b12\0\u2b5c\0\u2ba6\0\u2bf0\0\u2c3a\0\u01bc\0\u01bc\0\u2c84"+ - "\0\u2cce\0\u2d18\0\u2d62\0\u2dac\0\u2df6\0\u2e40\0\u2e8a\0\u01bc"+ - "\0\u2ed4\0\u01bc\0\u2f1e\0\u2f68\0\u2fb2\0\u2ffc\0\u3046\0\u3090"+ - "\0\u30da\0\u3124\0\u316e\0\u31b8\0\u3202\0\u324c\0\u2b5c\0\u2ba6"+ - "\0\u3296\0\u32e0\0\u332a\0\u01bc\0\u3374\0\u01bc\0\u01bc\0\u33be"+ - "\0\u3408\0\u3452\0\u349c\0\u01bc\0\u34e6\0\u01bc\0\u3530\0\u3046"+ - "\0\u3090\0\u357a\0\u35c4\0\u360e\0\u3658\0\u01bc\0\u01bc\0\u01bc"+ - "\0\u36a2\0\u01bc\0\u01bc\0\u36ec\0\u01bc\0\u2956\0\336\0\336"+ - "\0\u3658\0\336\0\u3736\0\u01bc\0\u01bc"; + "\0\0\0\113\0\226\0\341\0\u012c\0\u0177\0\u01c2\0\u020d"+ + "\0\u0258\0\u02a3\0\u02ee\0\u0339\0\u0384\0\u03cf\0\u041a\0\u01c2"+ + "\0\u0465\0\u04b0\0\u01c2\0\u04fb\0\u0546\0\u0591\0\u01c2\0\u01c2"+ + "\0\u01c2\0\u01c2\0\u01c2\0\u01c2\0\u01c2\0\u05dc\0\u0627\0\u0672"+ + "\0\u06bd\0\u0708\0\u0753\0\u079e\0\u07e9\0\u0834\0\u087f\0\u08ca"+ + "\0\u0915\0\u0960\0\u09ab\0\u09f6\0\u0a41\0\u0a8c\0\u0ad7\0\u0b22"+ + "\0\u0b6d\0\u0bb8\0\u0c03\0\u0c4e\0\u0c99\0\u0ce4\0\u01c2\0\u01c2"+ + "\0\u01c2\0\u01c2\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\u1068"+ + "\0\u1068\0\u1068\0\u01c2\0\u01c2\0\u11df\0\u122a\0\u1275\0\u12c0"+ + "\0\u130b\0\u1356\0\u01c2\0\u13a1\0\u13ec\0\u01c2\0\u1437\0\u1482"+ + "\0\u14cd\0\u01c2\0\u01c2\0\u1518\0\u1563\0\u15ae\0\u01c2\0\u15f9"+ + "\0\u1644\0\u168f\0\u16da\0\u1725\0\u1770\0\u01c2\0\u17bb\0\u1806"+ + "\0\u1851\0\u189c\0\u18e7\0\u1932\0\u197d\0\u19c8\0\u1a13\0\u1a5e"+ + "\0\u1aa9\0\u1af4\0\u1b3f\0\u02a3\0\u02a3\0\u02a3\0\u02a3\0\u1b8a"+ + "\0\u1bd5\0\u1c20\0\u1c6b\0\u1cb6\0\u1d01\0\u1d4c\0\u1d97\0\u01c2"+ + "\0\u01c2\0\u01c2\0\u1de2\0\u01c2\0\u01c2\0\u1e2d\0\u01c2\0\u01c2"+ + "\0\u01c2\0\u01c2\0\u01c2\0\u1e78\0\u01c2\0\u01c2\0\u1ec3\0\u1f0e"+ + "\0\u1f59\0\u1fa4\0\u1fef\0\u01c2\0\u203a\0\u2085\0\u20d0\0\u211b"+ + "\0\u2166\0\u21b1\0\u21fc\0\u2247\0\u2292\0\u22dd\0\u2328\0\u0f87"+ + "\0\u01c2\0\u2373\0\u1149\0\u1194\0\u23be\0\u2409\0\u2454\0\u249f"+ + "\0\u24ea\0\u2535\0\u2580\0\u25cb\0\u2616\0\u2661\0\u26ac\0\u26f7"+ + "\0\u2742\0\u0384\0\u278d\0\u27d8\0\u01c2\0\u278d\0\u2823\0\u286e"+ + "\0\u28b9\0\u2904\0\u294f\0\u02a3\0\u299a\0\u29e5\0\u02a3\0\u02a3"+ + "\0\u02a3\0\u2a30\0\u2a7b\0\u2ac6\0\u02a3\0\u2b11\0\u2b5c\0\u2ba7"+ + "\0\u2bf2\0\u2c3d\0\u2c88\0\u02a3\0\u2cd3\0\u2d1e\0\u2d69\0\u2db4"+ + "\0\u2dff\0\u01c2\0\u01c2\0\u01c2\0\u01c2\0\u2e4a\0\u2e95\0\u2ee0"+ + "\0\u01c2\0\u2e95\0\u2f2b\0\u2f76\0\u01c2\0\u2fc1\0\u300c\0\u01c2"+ + "\0\u3057\0\u30a2\0\u30ed\0\u3138\0\u3183\0\u01c2\0\u31ce\0\u3219"+ + "\0\u3264\0\u02a3\0\u02a3\0\u32af\0\u32fa\0\u3345\0\u3390\0\u33db"+ + "\0\u3426\0\u02a3\0\u3471\0\u02a3\0\u34bc\0\u3507\0\u3552\0\u359d"+ + "\0\u35e8\0\u3633\0\u367e\0\u36c9\0\u3714\0\u375f\0\u37aa\0\u37f5"+ + "\0\u30a2\0\u30ed\0\u3840\0\u388b\0\u02a3\0\u38d6\0\u3921\0\u02a3"+ + "\0\u02a3\0\u396c\0\u39b7\0\u3a02\0\u3a4d\0\u02a3\0\u3a98\0\u02a3"+ + "\0\u3ae3\0\u35e8\0\u3633\0\u3b2e\0\u3b79\0\u3bc4\0\u3c0f\0\u02a3"+ + "\0\u02a3\0\u02a3\0\u3c5a\0\u02a3\0\u02a3\0\u3ca5\0\u02a3\0\u2e95"+ + "\0\u01c2\0\u01c2\0\u3c0f\0\u01c2\0\u3cf0\0\u02a3\0\u02a3"; private static int [] zzUnpackRowMap() { - int [] result = new int[277]; + int [] result = new int[303]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -286,266 +302,332 @@ class _PythonLexer implements FlexLexer { private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = - "\1\4\1\5\2\6\1\7\1\6\3\7\1\10\1\7"+ - "\1\11\1\4\1\7\1\4\1\12\1\7\1\13\1\7"+ - "\2\10\1\14\1\15\1\16\1\17\1\20\1\21\1\22"+ - "\1\23\1\24\1\25\1\26\1\7\1\27\1\30\1\31"+ - "\1\32\1\7\1\33\1\34\1\35\1\36\1\10\1\37"+ - "\1\7\1\40\1\41\1\7\1\42\1\43\1\7\1\44"+ - "\1\45\1\46\1\47\1\50\1\51\1\52\1\53\1\54"+ - "\1\55\1\56\1\57\1\60\1\61\1\62\1\63\1\64"+ - "\1\65\1\66\1\67\1\70\1\71\1\4\11\72\1\73"+ - "\1\72\1\74\1\0\6\72\2\73\1\75\1\15\1\76"+ - "\1\17\1\20\1\21\1\77\6\72\1\73\1\72\1\73"+ - "\1\72\1\73\3\72\2\73\35\72\1\0\1\4\1\5"+ - "\2\6\1\7\1\6\3\7\1\100\1\7\1\74\1\4"+ - "\1\7\1\4\1\12\1\7\1\13\1\7\2\100\1\101"+ - "\1\15\1\102\1\17\1\20\1\21\1\77\1\23\1\24"+ - "\1\25\1\26\1\7\1\27\1\103\1\31\1\104\1\7"+ - "\1\105\1\34\1\35\1\36\1\100\1\106\1\7\1\40"+ - "\1\41\1\7\1\42\1\43\1\7\1\44\1\45\1\46"+ - "\1\47\1\50\1\51\1\52\1\53\1\54\1\55\1\56"+ - "\1\57\1\60\1\61\1\62\1\63\1\64\1\65\1\66"+ - "\1\67\1\107\1\71\1\4\113\0\1\110\1\111\1\110"+ - "\1\0\1\110\1\112\1\113\1\114\1\115\1\116\4\0"+ - "\1\117\1\120\1\0\1\121\16\0\1\120\2\0\1\115"+ - "\2\0\1\116\1\114\3\0\1\112\36\0\3\6\1\0"+ - "\1\6\1\0\1\122\2\0\1\116\4\0\1\117\1\120"+ - "\1\0\1\121\16\0\1\120\5\0\1\116\43\0\12\7"+ - "\2\0\2\7\1\0\1\7\1\0\3\7\10\0\26\7"+ - "\30\0\10\7\1\123\1\7\2\0\2\7\1\0\1\7"+ - "\1\0\1\7\2\123\1\14\1\0\1\16\5\0\5\7"+ - "\1\123\1\7\1\123\1\7\1\123\3\7\2\123\7\7"+ - "\27\0\14\11\1\0\16\11\1\0\56\11\1\0\3\124"+ - "\1\0\1\124\170\0\1\125\7\0\1\126\15\0\14\127"+ - "\1\0\10\127\1\130\1\131\4\127\1\132\56\127\14\133"+ - "\1\0\11\133\1\134\1\135\3\133\1\132\56\133\1\0"+ - "\12\7\2\0\2\7\1\0\1\7\1\0\3\7\10\0"+ - "\1\7\1\136\1\7\1\137\22\7\30\0\12\7\2\0"+ - "\2\7\1\0\1\7\1\0\3\7\10\0\13\7\1\140"+ - "\12\7\30\0\12\7\2\0\2\7\1\0\1\7\1\0"+ - "\3\7\10\0\4\7\1\141\21\7\30\0\12\7\2\0"+ - "\2\7\1\0\1\7\1\0\3\7\10\0\12\7\1\142"+ - "\4\7\1\143\6\7\30\0\10\7\1\123\1\7\2\0"+ - "\2\7\1\0\1\7\1\0\1\7\2\123\1\14\1\0"+ - "\1\16\5\0\1\144\3\7\1\145\1\123\1\7\1\123"+ - "\1\7\1\123\3\7\2\123\7\7\30\0\12\7\2\0"+ - "\2\7\1\0\1\7\1\0\3\7\10\0\5\7\1\146"+ - "\20\7\30\0\10\7\1\123\1\7\2\0\2\7\1\0"+ - "\1\7\1\0\1\7\2\123\1\14\1\0\1\16\5\0"+ - "\5\7\1\147\1\7\1\123\1\7\1\123\3\7\2\123"+ - "\7\7\30\0\10\7\1\123\1\7\2\0\2\7\1\0"+ - "\1\7\1\0\1\7\2\123\1\14\1\0\1\16\5\0"+ - "\5\7\1\123\1\7\1\123\1\7\1\123\1\150\1\151"+ - "\1\7\2\123\7\7\30\0\12\7\2\0\2\7\1\0"+ - "\1\7\1\0\3\7\10\0\1\152\25\7\30\0\12\7"+ - "\2\0\2\7\1\0\1\7\1\0\3\7\10\0\5\7"+ - "\1\153\20\7\30\0\12\7\2\0\2\7\1\0\1\7"+ - "\1\0\3\7\10\0\1\7\1\154\1\7\1\155\12\7"+ - "\1\156\3\7\1\157\3\7\30\0\10\7\1\123\1\7"+ - "\2\0\2\7\1\0\1\7\1\0\1\7\2\123\1\14"+ - "\1\0\1\16\5\0\5\7\1\160\1\7\1\123\1\7"+ - "\1\123\1\7\1\161\1\162\2\123\7\7\30\0\12\7"+ - "\2\0\2\7\1\0\1\7\1\0\3\7\10\0\1\163"+ - "\25\7\30\0\12\7\2\0\2\7\1\0\1\7\1\0"+ - "\3\7\10\0\14\7\1\164\11\7\30\0\12\7\2\0"+ - "\2\7\1\0\1\7\1\0\3\7\10\0\12\7\1\165"+ - "\13\7\30\0\12\7\2\0\2\7\1\0\1\7\1\0"+ - "\3\7\10\0\25\7\1\166\113\0\1\167\111\0\1\170"+ - "\111\0\1\171\1\172\110\0\1\173\111\0\1\174\2\0"+ - "\1\175\106\0\1\176\111\0\1\177\111\0\1\200\111\0"+ - "\1\201\111\0\1\202\7\0\1\203\101\0\1\204\7\0"+ - "\1\205\1\206\100\0\1\207\36\0\1\210\11\0\2\210"+ - "\1\75\1\0\1\76\12\0\1\210\1\0\1\210\1\0"+ - "\1\210\3\0\2\210\36\0\14\74\1\0\16\74\1\0"+ - "\56\74\14\211\1\0\10\211\1\212\1\213\4\211\1\214"+ - "\56\211\14\215\1\0\11\215\1\216\1\217\3\215\1\214"+ - "\56\215\1\0\10\7\1\220\1\7\2\0\2\7\1\0"+ - "\1\7\1\0\1\7\2\220\1\101\1\0\1\102\5\0"+ - "\5\7\1\220\1\7\1\220\1\7\1\220\3\7\2\220"+ - "\7\7\27\0\14\221\1\0\10\221\1\222\1\223\4\221"+ - "\1\0\56\221\14\224\1\0\11\224\1\225\1\226\3\224"+ - "\1\0\56\224\1\0\10\7\1\220\1\7\2\0\2\7"+ - "\1\0\1\7\1\0\1\7\2\220\1\101\1\0\1\102"+ - "\5\0\1\144\3\7\1\145\1\220\1\7\1\220\1\7"+ - "\1\220\3\7\2\220\7\7\30\0\10\7\1\220\1\7"+ - "\2\0\2\7\1\0\1\7\1\0\1\7\2\220\1\101"+ - "\1\0\1\102\5\0\5\7\1\227\1\7\1\220\1\7"+ - "\1\220\3\7\2\220\7\7\30\0\10\7\1\220\1\7"+ - "\2\0\2\7\1\0\1\7\1\0\1\7\2\220\1\101"+ - "\1\0\1\102\5\0\5\7\1\220\1\7\1\220\1\7"+ - "\1\220\1\150\1\151\1\7\2\220\7\7\30\0\10\7"+ - "\1\220\1\7\2\0\2\7\1\0\1\7\1\0\1\7"+ - "\2\220\1\101\1\0\1\102\5\0\5\7\1\230\1\7"+ - "\1\220\1\7\1\220\1\7\1\161\1\162\2\220\7\7"+ - "\42\0\1\231\14\0\1\232\2\0\1\233\57\0\1\110"+ - "\1\111\1\110\1\0\1\110\1\0\1\113\2\0\1\116"+ - "\4\0\1\117\1\120\1\0\1\121\16\0\1\120\5\0"+ - "\1\116\43\0\3\111\1\0\1\111\1\0\1\234\7\0"+ - "\1\117\1\120\1\0\1\121\16\0\1\120\51\0\5\235"+ - "\1\0\1\236\1\0\1\235\6\0\1\235\2\0\1\235"+ - "\11\0\1\235\1\0\1\235\1\0\1\235\2\0\1\235"+ - "\1\0\1\235\4\0\1\235\37\0\1\110\1\111\1\110"+ - "\1\0\1\110\105\0\1\237\1\0\1\237\1\0\1\237"+ - "\1\0\1\240\103\0\1\241\3\0\1\241\1\0\1\242"+ - "\103\0\3\124\1\0\1\124\12\0\1\120\1\0\1\121"+ - "\16\0\1\120\51\0\3\243\1\0\1\243\13\0\1\244"+ - "\41\0\1\244\27\0\3\6\1\0\1\6\105\0\10\7"+ - "\1\245\1\7\2\0\2\7\1\0\1\7\1\0\1\7"+ - "\2\245\1\14\1\0\1\16\5\0\5\7\1\245\1\7"+ - "\1\245\1\7\1\245\3\7\2\245\7\7\30\0\3\124"+ - "\1\0\1\124\1\0\1\246\10\0\1\120\1\0\1\121"+ - "\16\0\1\120\50\0\14\127\1\0\10\127\1\247\1\131"+ - "\4\127\1\132\56\127\25\0\1\250\1\251\1\0\2\252"+ - "\1\0\2\132\55\0\112\127\14\133\1\0\11\133\1\134"+ - "\1\247\3\133\1\132\170\133\26\0\1\251\1\253\2\252"+ - "\1\0\2\132\56\0\12\7\2\0\2\7\1\0\1\7"+ - "\1\0\3\7\10\0\2\7\1\254\23\7\30\0\12\7"+ - "\2\0\2\7\1\0\1\7\1\0\3\7\10\0\3\7"+ - "\1\255\22\7\30\0\12\7\2\0\2\7\1\0\1\7"+ - "\1\0\3\7\10\0\6\7\1\256\17\7\30\0\12\7"+ - "\2\0\2\7\1\0\1\7\1\0\3\7\10\0\12\7"+ - "\1\257\3\7\1\260\7\7\30\0\12\7\2\0\2\7"+ - "\1\0\1\7\1\0\3\7\10\0\3\7\1\261\10\7"+ - "\1\262\11\7\30\0\12\7\2\0\2\7\1\0\1\7"+ - "\1\0\3\7\10\0\11\7\1\263\14\7\30\0\12\7"+ - "\2\0\2\7\1\0\1\7\1\0\3\7\10\0\14\7"+ - "\1\264\11\7\30\0\12\7\2\0\2\7\1\0\1\7"+ - "\1\0\3\7\10\0\6\7\1\265\17\7\30\0\12\7"+ - "\2\0\2\7\1\0\1\7\1\0\3\7\10\0\21\7"+ - "\1\266\4\7\30\0\10\7\1\245\1\7\2\0\2\7"+ - "\1\0\1\7\1\0\1\7\2\245\1\14\1\0\1\16"+ - "\5\0\4\7\1\267\1\245\1\7\1\245\1\7\1\245"+ - "\3\7\2\245\7\7\30\0\12\7\2\0\2\7\1\0"+ - "\1\7\1\0\3\7\10\0\1\270\25\7\30\0\12\7"+ - "\2\0\2\7\1\0\1\7\1\0\3\7\10\0\1\7"+ - "\1\271\24\7\30\0\12\7\2\0\2\7\1\0\1\7"+ - "\1\0\3\7\10\0\22\7\1\272\3\7\30\0\12\7"+ - "\2\0\2\7\1\0\1\7\1\0\3\7\10\0\20\7"+ - "\1\273\5\7\30\0\10\7\1\245\1\7\2\0\2\7"+ - "\1\0\1\7\1\0\1\7\2\245\1\14\1\0\1\16"+ - "\5\0\5\7\1\245\1\7\1\245\1\7\1\245\1\7"+ - "\1\274\1\7\2\245\7\7\30\0\12\7\2\0\2\7"+ - "\1\0\1\7\1\0\3\7\10\0\5\7\1\275\20\7"+ - "\30\0\12\7\2\0\2\7\1\0\1\7\1\0\3\7"+ - "\10\0\1\7\1\276\24\7\30\0\12\7\2\0\2\7"+ - "\1\0\1\7\1\0\3\7\10\0\3\7\1\277\22\7"+ - "\30\0\12\7\2\0\2\7\1\0\1\7\1\0\3\7"+ - "\10\0\4\7\1\300\21\7\30\0\12\7\2\0\2\7"+ - "\1\0\1\7\1\0\3\7\10\0\13\7\1\301\12\7"+ - "\30\0\12\7\2\0\2\7\1\0\1\7\1\0\3\7"+ - "\10\0\14\7\1\302\11\7\113\0\1\303\111\0\1\304"+ - "\111\0\1\305\111\0\1\306\36\0\1\307\11\0\2\307"+ - "\1\75\1\0\1\76\12\0\1\307\1\0\1\307\1\0"+ - "\1\307\3\0\2\307\36\0\14\211\1\0\10\211\1\310"+ - "\1\213\4\211\1\214\56\211\25\0\1\311\1\312\1\0"+ - "\2\313\1\0\2\214\55\0\112\211\14\215\1\0\11\215"+ - "\1\216\1\310\3\215\1\214\170\215\26\0\1\312\1\314"+ - "\2\313\1\0\2\214\56\0\10\7\1\315\1\7\2\0"+ - "\2\7\1\0\1\7\1\0\1\7\2\315\1\101\1\0"+ - "\1\102\5\0\5\7\1\315\1\7\1\315\1\7\1\315"+ - "\3\7\2\315\7\7\27\0\14\221\1\0\10\221\1\316"+ - "\1\223\4\221\1\0\56\221\25\0\1\317\64\0\112\221"+ - "\14\224\1\0\11\224\1\225\1\316\3\224\1\0\170\224"+ - "\27\0\1\320\63\0\10\7\1\315\1\7\2\0\2\7"+ - "\1\0\1\7\1\0\1\7\2\315\1\101\1\0\1\102"+ - "\5\0\4\7\1\267\1\315\1\7\1\315\1\7\1\315"+ - "\3\7\2\315\7\7\30\0\10\7\1\315\1\7\2\0"+ - "\2\7\1\0\1\7\1\0\1\7\2\315\1\101\1\0"+ - "\1\102\5\0\5\7\1\315\1\7\1\315\1\7\1\315"+ - "\1\7\1\274\1\7\2\315\7\7\27\0\14\231\1\0"+ - "\16\231\1\233\56\231\1\0\3\111\1\0\1\111\105\0"+ - "\5\235\1\0\1\236\1\0\1\235\1\116\5\0\1\235"+ - "\2\0\1\235\11\0\1\235\1\0\1\235\1\0\1\235"+ - "\2\0\1\235\1\0\1\235\1\116\3\0\1\235\37\0"+ - "\5\235\3\0\1\235\6\0\1\235\2\0\1\235\11\0"+ - "\1\235\1\0\1\235\1\0\1\235\2\0\1\235\1\0"+ - "\1\235\4\0\1\235\37\0\1\237\1\0\1\237\1\0"+ - "\1\237\1\0\1\240\2\0\1\116\34\0\1\116\43\0"+ - "\1\237\1\0\1\237\1\0\1\237\105\0\1\241\3\0"+ - "\1\241\1\0\1\242\2\0\1\116\34\0\1\116\43\0"+ - "\1\241\3\0\1\241\105\0\3\243\1\0\1\243\1\0"+ - "\1\244\12\0\1\121\70\0\3\243\1\0\1\243\105\0"+ - "\12\7\2\0\2\7\1\0\1\7\1\0\3\7\1\14"+ - "\1\0\1\16\5\0\26\7\55\0\1\251\1\0\2\252"+ - "\1\0\2\132\55\0\25\250\1\321\1\322\63\250\26\253"+ - "\1\323\1\324\62\253\1\0\12\7\2\0\2\7\1\0"+ - "\1\7\1\0\3\7\10\0\4\7\1\325\21\7\30\0"+ - "\12\7\2\0\2\7\1\0\1\7\1\0\3\7\10\0"+ - "\4\7\1\326\21\7\30\0\12\7\2\0\2\7\1\0"+ - "\1\7\1\0\3\7\10\0\16\7\1\327\7\7\30\0"+ - "\12\7\2\0\2\7\1\0\1\7\1\0\3\7\10\0"+ - "\4\7\1\330\21\7\30\0\12\7\2\0\2\7\1\0"+ - "\1\7\1\0\3\7\10\0\3\7\1\331\22\7\30\0"+ - "\12\7\2\0\2\7\1\0\1\7\1\0\3\7\10\0"+ - "\15\7\1\332\10\7\30\0\12\7\2\0\2\7\1\0"+ - "\1\7\1\0\3\7\10\0\1\333\25\7\30\0\12\7"+ - "\2\0\2\7\1\0\1\7\1\0\3\7\10\0\3\7"+ - "\1\334\22\7\30\0\12\7\2\0\2\7\1\0\1\7"+ - "\1\0\3\7\10\0\6\7\1\335\17\7\30\0\12\7"+ - "\2\0\2\7\1\0\1\7\1\0\3\7\10\0\7\7"+ - "\1\336\16\7\30\0\12\7\2\0\2\7\1\0\1\7"+ - "\1\0\3\7\10\0\13\7\1\337\12\7\30\0\12\7"+ - "\2\0\2\7\1\0\1\7\1\0\3\7\10\0\22\7"+ - "\1\340\3\7\30\0\12\7\2\0\2\7\1\0\1\7"+ - "\1\0\3\7\10\0\1\341\25\7\30\0\12\7\2\0"+ - "\2\7\1\0\1\7\1\0\3\7\10\0\3\7\1\342"+ - "\22\7\30\0\12\7\2\0\2\7\1\0\1\7\1\0"+ - "\3\7\10\0\12\7\1\343\13\7\30\0\12\7\2\0"+ - "\2\7\1\0\1\7\1\0\3\7\10\0\7\7\1\344"+ - "\16\7\30\0\12\7\2\0\2\7\1\0\1\7\1\0"+ - "\3\7\10\0\12\7\1\345\13\7\54\0\1\75\1\0"+ - "\1\76\110\0\1\312\1\0\2\313\1\0\2\214\55\0"+ - "\25\311\1\346\1\347\63\311\26\314\1\350\1\351\62\314"+ - "\1\0\12\7\2\0\2\7\1\0\1\7\1\0\3\7"+ - "\1\101\1\0\1\102\5\0\26\7\27\0\25\317\1\352"+ - "\1\353\63\317\26\320\1\354\1\355\62\320\25\250\1\356"+ - "\1\357\175\250\140\253\1\360\1\361\62\253\1\0\12\7"+ - "\2\0\2\7\1\0\1\7\1\0\3\7\10\0\5\7"+ - "\1\362\20\7\30\0\12\7\2\0\2\7\1\0\1\7"+ - "\1\0\3\7\10\0\20\7\1\363\5\7\30\0\12\7"+ - "\2\0\2\7\1\0\1\7\1\0\3\7\10\0\4\7"+ - "\1\364\21\7\30\0\12\7\2\0\2\7\1\0\1\7"+ - "\1\0\3\7\10\0\5\7\1\365\20\7\30\0\12\7"+ - "\2\0\2\7\1\0\1\7\1\0\3\7\10\0\10\7"+ - "\1\366\15\7\30\0\12\7\2\0\2\7\1\0\1\7"+ - "\1\0\3\7\10\0\3\7\1\367\22\7\30\0\12\7"+ - "\2\0\2\7\1\0\1\7\1\0\3\7\10\0\14\7"+ - "\1\370\11\7\30\0\12\7\2\0\2\7\1\0\1\7"+ - "\1\0\3\7\10\0\2\7\1\371\23\7\30\0\12\7"+ - "\2\0\2\7\1\0\1\7\1\0\3\7\10\0\5\7"+ - "\1\372\20\7\30\0\12\7\2\0\2\7\1\0\1\7"+ - "\1\0\3\7\10\0\12\7\1\373\13\7\30\0\12\7"+ - "\2\0\2\7\1\0\1\7\1\0\3\7\10\0\2\7"+ - "\1\374\23\7\30\0\12\7\2\0\2\7\1\0\1\7"+ - "\1\0\3\7\10\0\1\375\25\7\30\0\12\7\2\0"+ - "\2\7\1\0\1\7\1\0\3\7\10\0\4\7\1\376"+ - "\21\7\27\0\25\311\1\377\1\u0100\175\311\140\314\1\u0101"+ - "\1\u0102\62\314\25\317\1\u0103\1\353\175\317\140\320\1\354"+ - "\1\u0104\62\320\25\250\1\u0105\1\357\63\250\26\253\1\360"+ - "\1\u0105\62\253\1\0\12\7\2\0\2\7\1\0\1\7"+ - "\1\0\3\7\10\0\6\7\1\u0106\17\7\30\0\12\7"+ - "\2\0\2\7\1\0\1\7\1\0\3\7\10\0\6\7"+ - "\1\u0107\17\7\30\0\12\7\2\0\2\7\1\0\1\7"+ - "\1\0\3\7\10\0\1\7\1\u0108\24\7\30\0\12\7"+ - "\2\0\2\7\1\0\1\7\1\0\3\7\10\0\1\7"+ - "\1\u0109\24\7\30\0\12\7\2\0\2\7\1\0\1\7"+ - "\1\0\3\7\10\0\1\u010a\25\7\30\0\12\7\2\0"+ - "\2\7\1\0\1\7\1\0\3\7\10\0\6\7\1\u010b"+ - "\17\7\30\0\12\7\2\0\2\7\1\0\1\7\1\0"+ - "\3\7\10\0\12\7\1\u010c\13\7\30\0\12\7\2\0"+ - "\2\7\1\0\1\7\1\0\3\7\10\0\12\7\1\u010d"+ - "\13\7\27\0\25\311\1\u010e\1\u0100\63\311\26\314\1\u0101"+ - "\1\u010e\62\314\25\317\1\u010f\1\353\63\317\26\320\1\354"+ - "\1\u010f\62\320\26\0\1\u0110\1\0\2\u0111\1\0\2\u0112"+ - "\56\0\12\7\2\0\2\7\1\0\1\7\1\0\3\7"+ - "\10\0\15\7\1\u0113\10\7\30\0\12\7\2\0\2\7"+ - "\1\0\1\7\1\0\3\7\10\0\21\7\1\u0114\4\7"+ - "\30\0\12\7\2\0\2\7\1\0\1\7\1\0\3\7"+ - "\10\0\4\7\1\u0115\21\7\27\0"; + "\1\7\1\10\2\11\1\12\1\11\3\12\1\13\1\12"+ + "\1\14\1\7\1\12\1\7\1\15\1\12\1\16\1\12"+ + "\2\13\1\17\1\20\1\21\1\22\1\23\1\24\1\25"+ + "\1\12\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\1\12\1\43"+ + "\1\44\1\45\1\46\1\13\1\47\1\12\1\50\1\51"+ + "\1\12\1\52\1\53\1\12\1\54\1\55\1\56\1\57"+ + "\1\60\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\5\76\1\77\2\76\1\31\1\32\1\33\1\103"+ + "\5\76\1\77\1\76\1\77\3\76\1\77\32\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\12\1\107\1\110\1\30\1\31\1\32\1\33\1\103"+ + "\1\35\1\36\1\37\1\40\1\41\1\111\1\12\1\112"+ + "\1\44\1\45\1\46\1\104\1\47\1\12\1\50\1\51"+ + "\1\12\1\52\1\53\1\12\1\54\1\55\1\56\1\57"+ + "\1\60\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\2\113\1\117\6\113"+ + "\1\120\1\121\1\122\1\103\47\113\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\123\1\24\1\25\1\12\1\107\1\27"+ + "\1\124\1\31\1\32\1\33\1\103\1\35\1\36\1\37"+ + "\1\40\1\41\1\111\1\12\1\112\1\44\1\45\1\46"+ + "\1\104\1\47\1\12\1\50\1\51\1\12\1\52\1\53"+ + "\1\12\1\54\1\55\1\56\1\57\1\60\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\0\1\100\12\0\1\20"+ + "\11\0\1\31\1\32\1\33\1\103\163\0\1\125\1\126"+ + "\1\125\1\0\1\125\1\127\1\130\1\131\1\132\1\133"+ + "\4\0\1\134\1\135\1\0\1\136\24\0\1\135\1\0"+ + "\1\132\2\0\1\133\1\131\3\0\1\127\32\0\3\11"+ + "\1\0\1\11\1\0\1\137\2\0\1\133\4\0\1\134"+ + "\1\135\1\0\1\136\24\0\1\135\4\0\1\133\37\0"+ + "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ + "\1\12\2\0\3\12\7\0\23\12\24\0\10\12\1\140"+ + "\1\12\2\0\2\12\1\0\1\12\1\0\1\12\2\140"+ + "\1\17\1\0\1\21\1\22\2\0\2\12\1\140\7\0"+ + "\4\12\1\140\1\12\1\140\3\12\1\140\1\22\7\12"+ + "\23\0\14\14\1\0\26\14\1\0\47\14\1\0\3\141"+ + "\1\0\1\141\176\0\1\142\7\0\1\143\11\0\14\144"+ + "\1\0\10\144\1\145\1\146\14\144\1\147\47\144\14\150"+ + "\1\0\11\150\1\151\1\152\13\150\1\147\47\150\1\0"+ + "\10\12\1\153\1\12\2\0\2\12\1\0\1\12\1\0"+ + "\1\12\2\153\1\154\1\0\1\155\1\12\2\0\2\12"+ + "\1\153\7\0\4\12\1\153\1\12\1\153\3\12\1\153"+ + "\10\12\114\0\1\156\22\0\12\12\2\0\2\12\1\0"+ + "\1\12\1\0\3\12\3\0\1\12\2\0\1\12\1\157"+ + "\1\12\7\0\1\160\22\12\24\0\10\12\1\140\1\12"+ + "\2\0\2\12\1\0\1\12\1\0\1\12\2\140\1\17"+ + "\1\0\1\21\1\22\2\0\1\161\1\12\1\140\7\0"+ + "\2\12\1\162\1\12\1\140\1\12\1\140\3\12\1\140"+ + "\1\22\7\12\24\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\3\12\7\0\10\12"+ + "\1\163\12\12\24\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\3\12\7\0\2\12"+ + "\1\164\20\12\24\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\3\12\7\0\7\12"+ + "\1\165\4\12\1\166\6\12\24\0\12\12\2\0\2\12"+ + "\1\0\1\12\1\0\3\12\3\0\1\12\2\0\2\12"+ + "\1\167\7\0\23\12\24\0\10\12\1\140\1\12\2\0"+ + "\2\12\1\0\1\12\1\0\1\12\2\140\1\17\1\0"+ + "\1\21\1\22\2\0\2\12\1\170\7\0\4\12\1\140"+ + "\1\12\1\140\3\12\1\140\1\22\7\12\24\0\10\12"+ + "\1\140\1\12\2\0\2\12\1\0\1\12\1\0\1\12"+ + "\2\140\1\17\1\0\1\21\1\22\2\0\2\12\1\140"+ + "\7\0\4\12\1\140\1\12\1\140\1\171\1\172\1\12"+ + "\1\140\1\22\7\12\24\0\12\12\2\0\2\12\1\0"+ + "\1\12\1\0\3\12\3\0\1\12\2\0\1\173\2\12"+ + "\7\0\23\12\24\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\2\12\1\174\7\0"+ + "\23\12\24\0\12\12\2\0\2\12\1\0\1\12\1\0"+ + "\3\12\3\0\1\12\2\0\1\12\1\175\1\12\7\0"+ + "\1\176\12\12\1\177\3\12\1\200\3\12\24\0\10\12"+ + "\1\153\1\12\2\0\2\12\1\0\1\12\1\0\1\12"+ + "\2\153\1\154\1\0\1\155\1\12\2\0\2\12\1\201"+ + "\7\0\4\12\1\153\1\12\1\153\1\12\1\202\1\203"+ + "\1\153\10\12\24\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\1\204\2\12\7\0"+ + "\23\12\24\0\12\12\2\0\2\12\1\0\1\12\1\0"+ + "\3\12\3\0\1\12\2\0\3\12\7\0\11\12\1\205"+ + "\11\12\24\0\12\12\2\0\2\12\1\0\1\12\1\0"+ + "\3\12\3\0\1\12\2\0\3\12\7\0\7\12\1\206"+ + "\13\12\24\0\12\12\2\0\2\12\1\0\1\12\1\0"+ + "\3\12\3\0\1\12\2\0\3\12\7\0\22\12\1\207"+ + "\114\0\1\210\112\0\1\211\112\0\1\212\1\213\111\0"+ + "\1\214\112\0\1\215\2\0\1\216\107\0\1\217\112\0"+ + "\1\220\112\0\1\221\112\0\1\222\112\0\1\223\7\0"+ + "\1\224\102\0\1\225\7\0\1\226\1\227\21\0\1\230"+ + "\11\0\2\230\1\101\1\0\1\102\5\0\1\230\13\0"+ + "\1\230\1\0\1\230\3\0\1\230\33\0\14\100\1\0"+ + "\26\100\1\0\47\100\14\231\1\0\10\231\1\232\1\233"+ + "\14\231\1\234\47\231\14\235\1\0\11\235\1\236\1\237"+ + "\13\235\1\234\47\235\1\0\10\12\1\240\1\12\2\0"+ + "\2\12\1\0\1\12\1\0\1\12\2\240\1\105\1\0"+ + "\1\106\1\22\2\0\2\12\1\240\7\0\4\12\1\240"+ + "\1\12\1\240\3\12\1\240\1\22\7\12\23\0\14\241"+ + "\1\0\10\241\1\242\1\243\14\241\1\0\47\241\14\244"+ + "\1\0\11\244\1\245\1\246\13\244\1\0\47\244\1\0"+ + "\10\12\1\240\1\12\2\0\2\12\1\0\1\12\1\0"+ + "\1\12\2\240\1\105\1\0\1\106\1\22\2\0\1\161"+ + "\1\12\1\240\7\0\2\12\1\162\1\12\1\240\1\12"+ + "\1\240\3\12\1\240\1\22\7\12\36\0\1\247\24\0"+ + "\1\250\2\0\1\251\50\0\10\12\1\240\1\12\2\0"+ + "\2\12\1\0\1\12\1\0\1\12\2\240\1\105\1\0"+ + "\1\106\1\22\2\0\2\12\1\252\7\0\4\12\1\240"+ + "\1\12\1\240\3\12\1\240\1\22\7\12\24\0\10\12"+ + "\1\240\1\12\2\0\2\12\1\0\1\12\1\0\1\12"+ + "\2\240\1\105\1\0\1\106\1\22\2\0\2\12\1\240"+ + "\7\0\4\12\1\240\1\12\1\240\1\171\1\172\1\12"+ + "\1\240\1\22\7\12\23\0\14\113\1\0\10\113\1\0"+ + "\1\253\2\113\1\254\11\113\1\0\47\113\14\114\1\0"+ + "\10\114\1\100\1\255\2\114\1\256\11\114\1\0\47\114"+ + "\25\0\1\257\65\0\113\113\31\0\1\113\62\0\1\125"+ + "\1\126\1\125\1\0\1\125\1\0\1\130\2\0\1\133"+ + "\4\0\1\134\1\135\1\0\1\136\24\0\1\135\4\0"+ + "\1\133\37\0\3\126\1\0\1\126\1\0\1\260\7\0"+ + "\1\134\1\135\1\0\1\136\24\0\1\135\44\0\5\261"+ + "\1\0\1\262\1\0\1\261\6\0\1\261\2\0\1\261"+ + "\4\0\1\261\2\0\1\261\12\0\2\261\1\0\1\261"+ + "\1\0\1\261\4\0\1\261\33\0\1\125\1\126\1\125"+ + "\1\0\1\125\106\0\1\263\1\0\1\263\1\0\1\263"+ + "\1\0\1\264\104\0\1\265\3\0\1\265\1\0\1\266"+ + "\104\0\3\141\1\0\1\141\12\0\1\135\1\0\1\136"+ + "\24\0\1\135\44\0\3\267\1\0\1\267\13\0\1\270"+ + "\46\0\1\270\23\0\3\11\1\0\1\11\106\0\10\12"+ + "\1\271\1\12\2\0\2\12\1\0\1\12\1\0\1\12"+ + "\2\271\1\17\1\0\1\21\1\22\2\0\2\12\1\271"+ + "\7\0\4\12\1\271\1\12\1\271\3\12\1\271\1\22"+ + "\7\12\24\0\3\141\1\0\1\141\1\0\1\272\10\0"+ + "\1\135\1\0\1\136\24\0\1\135\43\0\14\144\1\0"+ + "\10\144\1\273\1\146\14\144\1\147\47\144\25\0\1\274"+ + "\1\275\11\0\2\276\1\0\2\147\46\0\113\144\14\150"+ + "\1\0\11\150\1\151\1\273\13\150\1\147\162\150\26\0"+ + "\1\275\1\277\10\0\2\276\1\0\2\147\47\0\10\12"+ + "\1\300\1\12\2\0\2\12\1\0\1\12\1\0\1\12"+ + "\2\300\1\154\1\0\1\155\1\12\2\0\2\12\1\300"+ + "\7\0\4\12\1\300\1\12\1\300\3\12\1\300\10\12"+ + "\50\0\1\301\114\0\1\302\64\0\12\12\2\0\2\12"+ + "\1\0\1\12\1\0\3\12\3\0\1\12\2\0\1\12"+ + "\1\303\1\12\7\0\23\12\24\0\12\12\2\0\2\12"+ + "\1\0\1\12\1\0\3\12\3\0\1\12\2\0\3\12"+ + "\7\0\1\12\1\304\21\12\24\0\12\12\2\0\2\12"+ + "\1\0\1\12\1\0\3\12\3\0\1\12\2\0\3\12"+ + "\7\0\11\12\1\305\11\12\24\0\12\12\2\0\2\12"+ + "\1\0\1\12\1\0\3\12\3\0\1\12\2\0\3\12"+ + "\7\0\3\12\1\306\17\12\24\0\12\12\2\0\2\12"+ + "\1\0\1\12\1\0\3\12\3\0\1\12\2\0\3\12"+ + "\7\0\3\12\1\307\17\12\24\0\12\12\2\0\2\12"+ + "\1\0\1\12\1\0\3\12\3\0\1\12\2\0\3\12"+ + "\7\0\7\12\1\310\3\12\1\311\7\12\24\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ + "\2\0\1\12\1\312\1\12\7\0\11\12\1\313\11\12"+ + "\24\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ + "\3\0\1\12\2\0\3\12\7\0\6\12\1\314\14\12"+ + "\24\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ + "\3\0\1\12\2\0\3\12\7\0\16\12\1\315\4\12"+ + "\24\0\10\12\1\271\1\12\2\0\2\12\1\0\1\12"+ + "\1\0\1\12\2\271\1\17\1\0\1\21\1\22\2\0"+ + "\2\12\1\271\7\0\2\12\1\316\1\12\1\271\1\12"+ + "\1\271\3\12\1\271\1\22\7\12\24\0\12\12\2\0"+ + "\2\12\1\0\1\12\1\0\3\12\3\0\1\12\2\0"+ + "\1\317\2\12\7\0\23\12\24\0\12\12\2\0\2\12"+ + "\1\0\1\12\1\0\3\12\3\0\1\12\2\0\3\12"+ + "\7\0\1\320\22\12\24\0\12\12\2\0\2\12\1\0"+ + "\1\12\1\0\3\12\3\0\1\12\2\0\3\12\7\0"+ + "\17\12\1\321\3\12\24\0\12\12\2\0\2\12\1\0"+ + "\1\12\1\0\3\12\3\0\1\12\2\0\3\12\7\0"+ + "\15\12\1\322\5\12\24\0\10\12\1\300\1\12\2\0"+ + "\2\12\1\0\1\12\1\0\1\12\2\300\1\154\1\0"+ + "\1\155\1\12\2\0\2\12\1\300\7\0\4\12\1\300"+ + "\1\12\1\300\1\12\1\323\1\12\1\300\10\12\24\0"+ + "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ + "\1\12\2\0\2\12\1\324\7\0\23\12\24\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ + "\2\0\3\12\7\0\1\325\22\12\24\0\12\12\2\0"+ + "\2\12\1\0\1\12\1\0\3\12\3\0\1\12\2\0"+ + "\1\12\1\326\1\12\7\0\23\12\24\0\12\12\2\0"+ + "\2\12\1\0\1\12\1\0\3\12\3\0\1\12\2\0"+ + "\3\12\7\0\2\12\1\327\20\12\24\0\12\12\2\0"+ + "\2\12\1\0\1\12\1\0\3\12\3\0\1\12\2\0"+ + "\3\12\7\0\10\12\1\330\12\12\24\0\12\12\2\0"+ + "\2\12\1\0\1\12\1\0\3\12\3\0\1\12\2\0"+ + "\3\12\7\0\11\12\1\331\11\12\114\0\1\332\112\0"+ + "\1\333\112\0\1\334\112\0\1\335\32\0\1\336\11\0"+ + "\2\336\1\101\1\0\1\102\5\0\1\336\13\0\1\336"+ + "\1\0\1\336\3\0\1\336\33\0\14\231\1\0\10\231"+ + "\1\337\1\233\14\231\1\234\47\231\25\0\1\340\1\341"+ + "\11\0\2\342\1\0\2\234\46\0\113\231\14\235\1\0"+ + "\11\235\1\236\1\337\13\235\1\234\162\235\26\0\1\341"+ + "\1\343\10\0\2\342\1\0\2\234\47\0\10\12\1\344"+ + "\1\12\2\0\2\12\1\0\1\12\1\0\1\12\2\344"+ + "\1\105\1\0\1\106\1\22\2\0\2\12\1\344\7\0"+ + "\4\12\1\344\1\12\1\344\3\12\1\344\1\22\7\12"+ + "\23\0\14\241\1\0\10\241\1\345\1\243\14\241\1\0"+ + "\47\241\25\0\1\346\65\0\113\241\14\244\1\0\11\244"+ + "\1\245\1\345\13\244\1\0\162\244\27\0\1\347\63\0"+ + "\14\247\1\0\26\247\1\251\47\247\1\0\10\12\1\344"+ + "\1\12\2\0\2\12\1\0\1\12\1\0\1\12\2\344"+ + "\1\105\1\0\1\106\1\22\2\0\2\12\1\344\7\0"+ + "\2\12\1\316\1\12\1\344\1\12\1\344\3\12\1\344"+ + "\1\22\7\12\23\0\14\114\1\113\26\114\1\113\47\114"+ + "\14\100\1\0\14\100\1\114\11\100\1\0\47\100\25\0"+ + "\1\350\66\0\3\126\1\0\1\126\106\0\5\261\1\0"+ + "\1\262\1\0\1\261\1\133\5\0\1\261\2\0\1\261"+ + "\4\0\1\261\2\0\1\261\12\0\2\261\1\0\1\261"+ + "\1\0\1\261\1\133\3\0\1\261\33\0\5\261\3\0"+ + "\1\261\6\0\1\261\2\0\1\261\4\0\1\261\2\0"+ + "\1\261\12\0\2\261\1\0\1\261\1\0\1\261\4\0"+ + "\1\261\33\0\1\263\1\0\1\263\1\0\1\263\1\0"+ + "\1\264\2\0\1\133\41\0\1\133\37\0\1\263\1\0"+ + "\1\263\1\0\1\263\106\0\1\265\3\0\1\265\1\0"+ + "\1\266\2\0\1\133\41\0\1\133\37\0\1\265\3\0"+ + "\1\265\106\0\3\267\1\0\1\267\1\0\1\270\12\0"+ + "\1\136\71\0\3\267\1\0\1\267\106\0\12\12\2\0"+ + "\2\12\1\0\1\12\1\0\3\12\1\17\1\0\1\21"+ + "\1\22\2\0\3\12\7\0\13\12\1\22\7\12\51\0"+ + "\1\275\11\0\2\276\1\0\2\147\46\0\25\274\1\351"+ + "\1\352\64\274\26\277\1\353\1\354\63\277\1\0\10\12"+ + "\1\355\1\12\2\0\2\12\1\0\1\12\1\0\1\12"+ + "\2\355\1\154\1\0\1\155\1\12\2\0\2\12\1\355"+ + "\7\0\4\12\1\355\1\12\1\355\3\12\1\355\10\12"+ + "\50\0\1\356\114\0\1\356\64\0\12\12\2\0\2\12"+ + "\1\0\1\12\1\0\3\12\3\0\1\12\2\0\3\12"+ + "\7\0\2\12\1\357\20\12\24\0\12\12\2\0\2\12"+ + "\1\0\1\12\1\0\3\12\3\0\1\12\2\0\1\12"+ + "\1\360\1\12\7\0\23\12\24\0\12\12\2\0\2\12"+ + "\1\0\1\12\1\0\3\12\3\0\1\12\2\0\3\12"+ + "\7\0\12\12\1\361\10\12\24\0\12\12\2\0\2\12"+ + "\1\0\1\12\1\0\3\12\3\0\1\12\2\0\3\12"+ + "\7\0\2\12\1\362\20\12\24\0\12\12\2\0\2\12"+ + "\1\0\1\12\1\0\3\12\3\0\1\12\2\0\3\12"+ + "\7\0\13\12\1\363\7\12\24\0\12\12\2\0\2\12"+ + "\1\0\1\12\1\0\3\12\3\0\1\12\2\0\3\12"+ + "\7\0\2\12\1\364\20\12\24\0\12\12\2\0\2\12"+ + "\1\0\1\12\1\0\3\12\3\0\1\12\2\0\1\365"+ + "\2\12\7\0\23\12\24\0\12\12\2\0\2\12\1\0"+ + "\1\12\1\0\3\12\3\0\1\12\2\0\1\12\1\366"+ + "\1\12\7\0\23\12\24\0\12\12\2\0\2\12\1\0"+ + "\1\12\1\0\3\12\3\0\1\12\2\0\3\12\7\0"+ + "\3\12\1\367\17\12\24\0\12\12\2\0\2\12\1\0"+ + "\1\12\1\0\3\12\3\0\1\12\2\0\3\12\7\0"+ + "\4\12\1\370\16\12\24\0\12\12\2\0\2\12\1\0"+ + "\1\12\1\0\3\12\3\0\1\12\2\0\3\12\7\0"+ + "\10\12\1\371\12\12\24\0\12\12\2\0\2\12\1\0"+ + "\1\12\1\0\3\12\3\0\1\12\2\0\3\12\7\0"+ + "\17\12\1\372\3\12\24\0\12\12\2\0\2\12\1\0"+ + "\1\12\1\0\3\12\3\0\1\12\2\0\1\373\2\12"+ + "\7\0\23\12\24\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\1\12\1\374\1\12"+ + "\7\0\23\12\24\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\3\12\7\0\7\12"+ + "\1\375\13\12\24\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\3\12\7\0\4\12"+ + "\1\376\16\12\24\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\3\12\7\0\7\12"+ + "\1\377\13\12\50\0\1\101\1\0\1\102\111\0\1\341"+ + "\11\0\2\342\1\0\2\234\46\0\25\340\1\u0100\1\u0101"+ + "\64\340\26\343\1\u0102\1\u0103\63\343\1\0\12\12\2\0"+ + "\2\12\1\0\1\12\1\0\3\12\1\105\1\0\1\106"+ + "\1\22\2\0\3\12\7\0\13\12\1\22\7\12\23\0"+ + "\25\346\1\u0104\1\u0105\64\346\26\347\1\u0106\1\u0107\63\347"+ + "\25\274\1\u0108\1\u0109\177\274\141\277\1\u010a\1\u010b\63\277"+ + "\1\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ + "\1\154\1\0\1\155\1\12\2\0\3\12\7\0\23\12"+ + "\24\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ + "\3\0\1\12\2\0\2\12\1\u010c\7\0\23\12\24\0"+ + "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ + "\1\12\2\0\3\12\7\0\2\12\1\u010d\20\12\24\0"+ + "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ + "\1\12\2\0\2\12\1\u010e\7\0\23\12\24\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ + "\2\0\3\12\7\0\15\12\1\u010f\5\12\24\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ + "\2\0\3\12\7\0\5\12\1\u0110\15\12\24\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ + "\2\0\1\12\1\u0111\1\12\7\0\23\12\24\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ + "\2\0\3\12\7\0\11\12\1\u0112\11\12\24\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ + "\2\0\3\12\7\0\1\12\1\u0113\21\12\24\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ + "\2\0\2\12\1\u0114\7\0\23\12\24\0\12\12\2\0"+ + "\2\12\1\0\1\12\1\0\3\12\3\0\1\12\2\0"+ + "\3\12\7\0\7\12\1\u0115\13\12\24\0\12\12\2\0"+ + "\2\12\1\0\1\12\1\0\3\12\3\0\1\12\2\0"+ + "\3\12\7\0\1\12\1\u0116\21\12\24\0\12\12\2\0"+ + "\2\12\1\0\1\12\1\0\3\12\3\0\1\12\2\0"+ + "\1\u0117\2\12\7\0\23\12\24\0\12\12\2\0\2\12"+ + "\1\0\1\12\1\0\3\12\3\0\1\12\2\0\3\12"+ + "\7\0\2\12\1\u0118\20\12\23\0\25\340\1\u0119\1\u011a"+ + "\177\340\141\343\1\u011b\1\u011c\63\343\25\346\1\u011d\1\u0105"+ + "\177\346\141\347\1\u0106\1\u011e\63\347\25\274\1\u011f\1\u0109"+ + "\64\274\26\277\1\u010a\1\u011f\63\277\1\0\12\12\2\0"+ + "\2\12\1\0\1\12\1\0\3\12\3\0\1\12\2\0"+ + "\3\12\7\0\3\12\1\u0120\17\12\24\0\12\12\2\0"+ + "\2\12\1\0\1\12\1\0\3\12\3\0\1\12\2\0"+ + "\3\12\7\0\1\u0121\22\12\24\0\12\12\2\0\2\12"+ + "\1\0\1\12\1\0\3\12\3\0\1\12\2\0\3\12"+ + "\7\0\3\12\1\u0122\17\12\24\0\12\12\2\0\2\12"+ + "\1\0\1\12\1\0\3\12\3\0\1\12\2\0\3\12"+ + "\7\0\1\u0123\22\12\24\0\12\12\2\0\2\12\1\0"+ + "\1\12\1\0\3\12\3\0\1\12\2\0\1\u0124\2\12"+ + "\7\0\23\12\24\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\3\12\7\0\3\12"+ + "\1\u0125\17\12\24\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\3\12\7\0\7\12"+ + "\1\u0126\13\12\24\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\3\12\7\0\7\12"+ + "\1\u0127\13\12\23\0\25\340\1\u0128\1\u011a\64\340\26\343"+ + "\1\u011b\1\u0128\63\343\25\346\1\u0129\1\u0105\64\346\26\347"+ + "\1\u0106\1\u0129\63\347\26\0\1\u012a\11\0\2\u012b\1\0"+ + "\2\u012c\47\0\12\12\2\0\2\12\1\0\1\12\1\0"+ + "\3\12\3\0\1\12\2\0\3\12\7\0\12\12\1\u012d"+ + "\10\12\24\0\12\12\2\0\2\12\1\0\1\12\1\0"+ + "\3\12\3\0\1\12\2\0\3\12\7\0\16\12\1\u012e"+ + "\4\12\24\0\12\12\2\0\2\12\1\0\1\12\1\0"+ + "\3\12\3\0\1\12\2\0\3\12\7\0\2\12\1\u012f"+ + "\20\12\23\0"; private static int [] zzUnpackTrans() { - int [] result = new int[14208]; + int [] result = new int[15675]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -583,19 +665,20 @@ class _PythonLexer implements FlexLexer { private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\3\0\1\11\10\1\1\11\1\1\5\11\34\1\13\11"+ - "\4\1\1\11\11\1\5\0\1\11\1\1\1\0\1\11"+ - "\1\0\2\1\2\11\3\1\1\11\34\1\3\11\1\1"+ - "\2\11\1\1\5\11\1\1\2\11\1\1\1\11\1\0"+ - "\3\1\1\11\14\1\2\0\1\11\1\0\1\1\1\0"+ + "\6\0\1\11\10\1\1\11\2\1\1\11\3\1\7\11"+ + "\31\1\10\11\4\1\1\11\17\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\1\11\31\1\3\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\2\1\2\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\30\1\4\11\1\0\2\1\1\11"+ - "\1\0\2\1\1\11\2\1\1\0\2\1\1\0\21\1"+ - "\1\0\2\1\11\0\15\1\6\0\12\1\2\11\1\0"+ - "\1\11\3\1"; + "\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\1\0"+ + "\2\1\1\0\1\1\1\11\21\1\1\0\2\1\11\0"+ + "\15\1\6\0\12\1\2\11\1\0\1\11\3\1"; private static int [] zzUnpackAttribute() { - int [] result = new int[277]; + int [] result = new int[303]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -651,6 +734,38 @@ class _PythonLexer implements FlexLexer { private boolean zzEOFDone; /* user code: */ +static final class FStringState { + private final int oldState; + private final int oldBraceBalance; + private final String openingQuotes; + + FStringState(int state, int braceBalance, @NonNls String fStringStart) { + oldState = state; + oldBraceBalance = braceBalance; + + String prefix = fStringStart.toLowerCase(); + prefix = StringUtil.trimLeading(prefix, 'r'); + prefix = StringUtil.trimLeading(prefix, 'f'); + prefix = StringUtil.trimLeading(prefix, 'r'); + openingQuotes = prefix; + } +} + +void pushFString() { + states.push(new FStringState(yystate(), braceBalance, yytext().toString())); + braceBalance = 0; + yybegin(FSTRING); +} + +void popFString() { + FStringState state = states.pop(); + braceBalance = state.oldBraceBalance; + yybegin(state.oldState); +} + +private final Stack states = new Stack<>(); +private int braceBalance = 0; + private int getSpaceLength(CharSequence string) { String string1 = string.toString(); string1 = StringUtil.trimEnd(string1, "\\"); @@ -693,6 +808,23 @@ return yylength()-s.length(); return map; } + private static String zzToPrintable(CharSequence str) { + StringBuilder builder = new StringBuilder(); + for (int n = 0 ; n < str.length() ; ) { + int ch = Character.codePointAt(str, n); + int charCount = Character.charCount(ch); + n += charCount; + if (ch > 31 && ch < 127) { + builder.append((char)ch); + } else if (charCount == 1) { + builder.append(String.format("\\u%04X", ch)); + } else { + builder.append(String.format("\\U%06X", ch)); + } + } + return builder.toString(); + } + public final int getTokenStart() { return zzStartRead; } @@ -906,417 +1038,763 @@ return yylength()-s.length(); else { switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { case 1: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [273] { return PyTokenTypes.BAD_CHARACTER; }"); { return PyTokenTypes.BAD_CHARACTER; - } - case 102: break; + } + // fall through + case 108: break; case 2: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [185] { return PyTokenTypes.INTEGER_LITERAL; }"); { return PyTokenTypes.INTEGER_LITERAL; - } - case 103: break; + } + // fall through + case 109: break; case 3: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [220] { return PyTokenTypes.IDENTIFIER; }"); { return PyTokenTypes.IDENTIFIER; - } - case 104: break; + } + // fall through + case 110: break; case 4: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [157] { if (zzCurrentPos == 0) yybegin(PENDING_DOCSTRING); return PyTokenTypes.END_OF_LINE_COMMENT; }"); { if (zzCurrentPos == 0) yybegin(PENDING_DOCSTRING); return PyTokenTypes.END_OF_LINE_COMMENT; - } - case 105: break; + } + // fall through + case 111: break; case 5: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [266] { return PyTokenTypes.DOT; }"); { return PyTokenTypes.DOT; - } - case 106: break; + } + // fall through + case 112: break; case 6: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [246] { return PyTokenTypes.MINUS; }"); { return PyTokenTypes.MINUS; - } - case 107: break; + } + // fall through + case 113: break; case 7: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [159] { 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; - } - case 108: break; - case 8: - { return PyTokenTypes.BACKSLASH; - } - case 109: break; - case 9: - { return PyTokenTypes.SPACE; - } - case 110: break; - case 10: - { return PyTokenTypes.TAB; - } - case 111: break; - case 11: - { return PyTokenTypes.FORMFEED; - } - case 112: break; - case 12: - { if (zzCurrentPos == 0) yybegin(PENDING_DOCSTRING); return PyTokenTypes.LINE_BREAK; - } - case 113: break; - case 13: - { return PyTokenTypes.SEMICOLON; - } + } + // fall through case 114: break; - case 14: - { return PyTokenTypes.PLUS; - } + case 8: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [141] { return PyTokenTypes.BACKSLASH; }"); + { return PyTokenTypes.BACKSLASH; + } + // fall through case 115: break; - case 15: - { return PyTokenTypes.EQ; - } - case 116: break; - case 16: - { return PyTokenTypes.MULT; - } - case 117: break; - case 17: - { return PyTokenTypes.AT; - } - case 118: break; - case 18: - { return PyTokenTypes.DIV; - } - case 119: break; - case 19: - { return PyTokenTypes.PERC; - } - case 120: break; - case 20: - { return PyTokenTypes.AND; - } - case 121: break; - case 21: - { return PyTokenTypes.OR; - } - case 122: break; - case 22: - { return PyTokenTypes.XOR; - } - case 123: break; - case 23: - { return PyTokenTypes.GT; - } - case 124: break; - case 24: - { return PyTokenTypes.LT; - } - case 125: break; - case 25: - { return PyTokenTypes.TILDE; - } - case 126: break; - case 26: - { return PyTokenTypes.LPAR; - } - case 127: break; - case 27: - { return PyTokenTypes.RPAR; - } - case 128: break; - case 28: - { return PyTokenTypes.LBRACKET; - } - case 129: break; - case 29: - { return PyTokenTypes.RBRACKET; - } - case 130: break; - case 30: + case 9: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [260] { return PyTokenTypes.LBRACE; }"); { return PyTokenTypes.LBRACE; - } - case 131: break; - case 31: - { return PyTokenTypes.RBRACE; - } - case 132: break; - case 32: - { return PyTokenTypes.COMMA; - } - case 133: break; - case 33: + } + // fall through + case 116: break; + case 10: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [264] { return PyTokenTypes.COLON; }"); { return PyTokenTypes.COLON; - } + } + // fall through + case 117: break; + case 11: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [261] { return PyTokenTypes.RBRACE; }"); + { return PyTokenTypes.RBRACE; + } + // fall through + case 118: break; + case 12: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [138] { return PyTokenTypes.SPACE; }"); + { return PyTokenTypes.SPACE; + } + // fall through + case 119: break; + case 13: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [139] { return PyTokenTypes.TAB; }"); + { return PyTokenTypes.TAB; + } + // fall through + case 120: break; + case 14: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [140] { return PyTokenTypes.FORMFEED; }"); + { return PyTokenTypes.FORMFEED; + } + // fall through + case 121: break; + case 15: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [156] { if (zzCurrentPos == 0) yybegin(PENDING_DOCSTRING); return PyTokenTypes.LINE_BREAK; }"); + { if (zzCurrentPos == 0) yybegin(PENDING_DOCSTRING); return PyTokenTypes.LINE_BREAK; + } + // fall through + case 122: break; + case 16: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [269] { return PyTokenTypes.SEMICOLON; }"); + { return PyTokenTypes.SEMICOLON; + } + // fall through + case 123: break; + case 17: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [245] { return PyTokenTypes.PLUS; }"); + { return PyTokenTypes.PLUS; + } + // fall through + case 124: break; + case 18: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [268] { return PyTokenTypes.EQ; }"); + { return PyTokenTypes.EQ; + } + // fall through + case 125: break; + case 19: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [247] { return PyTokenTypes.MULT; }"); + { return PyTokenTypes.MULT; + } + // fall through + case 126: break; + case 20: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [262] { return PyTokenTypes.AT; }"); + { return PyTokenTypes.AT; + } + // fall through + case 127: break; + case 21: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [248] { return PyTokenTypes.DIV; }"); + { return PyTokenTypes.DIV; + } + // fall through + case 128: break; + case 22: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [249] { return PyTokenTypes.PERC; }"); + { return PyTokenTypes.PERC; + } + // fall through + case 129: break; + case 23: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [250] { return PyTokenTypes.AND; }"); + { return PyTokenTypes.AND; + } + // fall through + case 130: break; + case 24: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [251] { return PyTokenTypes.OR; }"); + { return PyTokenTypes.OR; + } + // fall through + case 131: break; + case 25: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [252] { return PyTokenTypes.XOR; }"); + { return PyTokenTypes.XOR; + } + // fall through + case 132: break; + case 26: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [255] { return PyTokenTypes.GT; }"); + { return PyTokenTypes.GT; + } + // fall through + case 133: break; + case 27: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [254] { return PyTokenTypes.LT; }"); + { return PyTokenTypes.LT; + } + // fall through case 134: break; - case 34: - { return PyTokenTypes.TICK; - } + case 28: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [253] { return PyTokenTypes.TILDE; }"); + { return PyTokenTypes.TILDE; + } + // fall through case 135: break; - case 35: - { yypushback(1); yybegin(YYINITIAL); - } + case 29: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [256] { return PyTokenTypes.LPAR; }"); + { return PyTokenTypes.LPAR; + } + // fall through case 136: break; - case 36: - { return PyTokenTypes.END_OF_LINE_COMMENT; - } + case 30: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [257] { return PyTokenTypes.RPAR; }"); + { return PyTokenTypes.RPAR; + } + // fall through case 137: break; + case 31: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [258] { return PyTokenTypes.LBRACKET; }"); + { return PyTokenTypes.LBRACKET; + } + // fall through + case 138: break; + case 32: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [259] { return PyTokenTypes.RBRACKET; }"); + { return PyTokenTypes.RBRACKET; + } + // fall through + case 139: break; + case 33: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [263] { return PyTokenTypes.COMMA; }"); + { return PyTokenTypes.COMMA; + } + // fall through + case 140: break; + case 34: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [267] { return PyTokenTypes.TICK; }"); + { return PyTokenTypes.TICK; + } + // fall through + case 141: break; + case 35: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [287] { yypushback(1); yybegin(YYINITIAL); }"); + { yypushback(1); yybegin(YYINITIAL); + } + // fall through + case 142: break; + case 36: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [181] { return PyTokenTypes.END_OF_LINE_COMMENT; }"); + { return PyTokenTypes.END_OF_LINE_COMMENT; + } + // fall through + case 143: break; case 37: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [281] { 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; - } - case 138: break; - case 38: - { return PyTokenTypes.LINE_BREAK; - } - case 139: break; - case 39: - { return PyTokenTypes.SINGLE_QUOTED_STRING; - } - case 140: break; - case 40: - { return PyTokenTypes.FLOAT_LITERAL; - } - case 141: break; - case 41: - { return PyTokenTypes.IMAGINARY_LITERAL; - } - case 142: break; - case 42: - { return PyTokenTypes.MINUSEQ; - } - case 143: break; - case 43: - { return PyTokenTypes.RARROW; - } + } + // fall through case 144: break; + case 38: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [180] { return PyTokenTypes.LINE_BREAK; }"); + { return PyTokenTypes.LINE_BREAK; + } + // fall through + case 145: break; + case 39: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [189] { return PyTokenTypes.SINGLE_QUOTED_STRING; }"); + { return PyTokenTypes.SINGLE_QUOTED_STRING; + } + // fall through + case 146: break; + case 40: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [144] { return PyTokenTypes.FSTRING_TEXT; }"); + { return PyTokenTypes.FSTRING_TEXT; + } + // fall through + case 147: break; + case 41: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [145] { popFString(); return PyTokenTypes.FSTRING_END; }"); + { popFString(); return PyTokenTypes.FSTRING_END; + } + // fall through + case 148: break; + case 42: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [146] { yybegin(FSTRING_FRAGMENT); return PyTokenTypes.FSTRING_FRAGMENT_START; }"); + { yybegin(FSTRING_FRAGMENT); return PyTokenTypes.FSTRING_FRAGMENT_START; + } + // fall through + case 149: break; + case 43: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [150] { braceBalance++; return PyTokenTypes.LBRACE; }"); + { braceBalance++; return PyTokenTypes.LBRACE; + } + // fall through + case 150: break; case 44: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [151] { if (braceBalance == 0) { yybegin(FSTRING); return PyTokenTypes.FSTRING_FRAGMENT_END; }"+ZZ_NL+" else { braceBalance--; return PyTokenTypes.RBRACE; } }"); + { if (braceBalance == 0) { yybegin(FSTRING); return PyTokenTypes.FSTRING_FRAGMENT_END; } + else { braceBalance--; return PyTokenTypes.RBRACE; } + } + // fall through + case 151: break; + case 45: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [186] { return PyTokenTypes.FLOAT_LITERAL; }"); + { return PyTokenTypes.FLOAT_LITERAL; + } + // fall through + case 152: break; + case 46: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [187] { return PyTokenTypes.IMAGINARY_LITERAL; }"); + { return PyTokenTypes.IMAGINARY_LITERAL; + } + // fall through + case 153: break; + case 47: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [223] { return PyTokenTypes.MINUSEQ; }"); + { return PyTokenTypes.MINUSEQ; + } + // fall through + case 154: break; + case 48: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [244] { return PyTokenTypes.RARROW; }"); + { return PyTokenTypes.RARROW; + } + // fall through + case 155: break; + case 49: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [164] { 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; - } - case 145: break; - case 45: - { return PyTokenTypes.OR_KEYWORD; - } - case 146: break; - case 46: - { return PyTokenTypes.IN_KEYWORD; - } - case 147: break; - case 47: - { return PyTokenTypes.IS_KEYWORD; - } - case 148: break; - case 48: - { return PyTokenTypes.IF_KEYWORD; - } - case 149: break; - case 49: - { return PyTokenTypes.PLUSEQ; - } - case 150: break; - case 50: - { return PyTokenTypes.EQEQ; - } - case 151: break; - case 51: - { return PyTokenTypes.MULTEQ; - } - case 152: break; - case 52: - { return PyTokenTypes.EXP; - } - case 153: break; - case 53: - { return PyTokenTypes.ATEQ; - } - case 154: break; - case 54: - { return PyTokenTypes.DIVEQ; - } - case 155: break; - case 55: - { return PyTokenTypes.FLOORDIV; - } + } + // fall through case 156: break; - case 56: - { return PyTokenTypes.PERCEQ; - } + case 50: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [271] { pushFString(); return PyTokenTypes.FSTRING_START; }"); + { pushFString(); return PyTokenTypes.FSTRING_START; + } + // fall through case 157: break; - case 57: - { return PyTokenTypes.ANDEQ; - } - case 158: break; - case 58: - { return PyTokenTypes.OREQ; - } - case 159: break; - case 59: - { return PyTokenTypes.XOREQ; - } - case 160: break; - case 60: - { return PyTokenTypes.GE; - } - case 161: break; - case 61: - { return PyTokenTypes.GTGT; - } - case 162: break; - case 62: - { return PyTokenTypes.LE; - } - case 163: break; - case 63: - { return PyTokenTypes.NE_OLD; - } - case 164: break; - case 64: - { return PyTokenTypes.LTLT; - } - case 165: break; - case 65: + case 51: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [242] { return PyTokenTypes.NE; }"); { return PyTokenTypes.NE; - } + } + // fall through + case 158: break; + case 52: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [212] { return PyTokenTypes.OR_KEYWORD; }"); + { return PyTokenTypes.OR_KEYWORD; + } + // fall through + case 159: break; + case 53: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [209] { return PyTokenTypes.IS_KEYWORD; }"); + { return PyTokenTypes.IS_KEYWORD; + } + // fall through + case 160: break; + case 54: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [208] { return PyTokenTypes.IN_KEYWORD; }"); + { return PyTokenTypes.IN_KEYWORD; + } + // fall through + case 161: break; + case 55: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [206] { return PyTokenTypes.IF_KEYWORD; }"); + { return PyTokenTypes.IF_KEYWORD; + } + // fall through + case 162: break; + case 56: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [222] { return PyTokenTypes.PLUSEQ; }"); + { return PyTokenTypes.PLUSEQ; + } + // fall through + case 163: break; + case 57: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [241] { return PyTokenTypes.EQEQ; }"); + { return PyTokenTypes.EQEQ; + } + // fall through + case 164: break; + case 58: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [225] { return PyTokenTypes.MULTEQ; }"); + { return PyTokenTypes.MULTEQ; + } + // fall through + case 165: break; + case 59: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [237] { return PyTokenTypes.EXP; }"); + { return PyTokenTypes.EXP; + } + // fall through case 166: break; - case 66: - { yypushback(getSpaceLength(yytext())); yybegin(YYINITIAL); return PyTokenTypes.DOCSTRING; - } + case 60: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [226] { return PyTokenTypes.ATEQ; }"); + { return PyTokenTypes.ATEQ; + } + // fall through case 167: break; - case 67: - { yypushback(yylength()-1); yybegin(PENDING_DOCSTRING); return PyTokenTypes.COLON; - } + case 61: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [228] { return PyTokenTypes.DIVEQ; }"); + { return PyTokenTypes.DIVEQ; + } + // fall through case 168: break; + case 62: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [238] { return PyTokenTypes.FLOORDIV; }"); + { return PyTokenTypes.FLOORDIV; + } + // fall through + case 169: break; + case 63: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [229] { return PyTokenTypes.PERCEQ; }"); + { return PyTokenTypes.PERCEQ; + } + // fall through + case 170: break; + case 64: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [230] { return PyTokenTypes.ANDEQ; }"); + { return PyTokenTypes.ANDEQ; + } + // fall through + case 171: break; + case 65: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [231] { return PyTokenTypes.OREQ; }"); + { return PyTokenTypes.OREQ; + } + // fall through + case 172: break; + case 66: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [232] { return PyTokenTypes.XOREQ; }"); + { return PyTokenTypes.XOREQ; + } + // fall through + case 173: break; + case 67: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [240] { return PyTokenTypes.GE; }"); + { return PyTokenTypes.GE; + } + // fall through + case 174: break; case 68: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [236] { return PyTokenTypes.GTGT; }"); + { return PyTokenTypes.GTGT; + } + // fall through + case 175: break; + case 69: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [239] { return PyTokenTypes.LE; }"); + { return PyTokenTypes.LE; + } + // fall through + case 176: break; + case 70: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [243] { return PyTokenTypes.NE_OLD; }"); + { return PyTokenTypes.NE_OLD; + } + // fall through + case 177: break; + case 71: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [235] { return PyTokenTypes.LTLT; }"); + { return PyTokenTypes.LTLT; + } + // fall through + case 178: break; + case 72: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [285] { yypushback(getSpaceLength(yytext())); yybegin(YYINITIAL); return PyTokenTypes.DOCSTRING; }"); + { yypushback(getSpaceLength(yytext())); yybegin(YYINITIAL); return PyTokenTypes.DOCSTRING; + } + // fall through + case 179: break; + case 73: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [277] { yypushback(yylength()-1); yybegin(PENDING_DOCSTRING); return PyTokenTypes.COLON; }"); + { yypushback(yylength()-1); yybegin(PENDING_DOCSTRING); return PyTokenTypes.COLON; + } + // fall through + case 180: break; + case 74: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [161] { 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; - } - case 169: break; - case 69: + } + // fall through + case 181: break; + case 75: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [170] { 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; - } - case 170: break; - case 70: - { return PyTokenTypes.AND_KEYWORD; - } - case 171: break; - case 71: - { return PyTokenTypes.NOT_KEYWORD; - } - case 172: break; - case 72: - { return PyTokenTypes.DEL_KEYWORD; - } - case 173: break; - case 73: - { yybegin(IN_DOCSTRING_OWNER); return PyTokenTypes.DEF_KEYWORD; - } - case 174: break; - case 74: - { return PyTokenTypes.TRY_KEYWORD; - } - case 175: break; - case 75: - { return PyTokenTypes.FOR_KEYWORD; - } - case 176: break; + } + // fall through + case 182: break; case 76: - { return PyTokenTypes.EXPEQ; - } - case 177: break; + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [192] { return PyTokenTypes.AND_KEYWORD; }"); + { return PyTokenTypes.AND_KEYWORD; + } + // fall through + case 183: break; case 77: - { return PyTokenTypes.FLOORDIVEQ; - } - case 178: break; + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [211] { return PyTokenTypes.NOT_KEYWORD; }"); + { return PyTokenTypes.NOT_KEYWORD; + } + // fall through + case 184: break; case 78: - { return PyTokenTypes.GTGTEQ; - } - case 179: break; + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [198] { return PyTokenTypes.DEL_KEYWORD; }"); + { return PyTokenTypes.DEL_KEYWORD; + } + // fall through + case 185: break; case 79: - { return PyTokenTypes.LTLTEQ; - } - case 180: break; + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [197] { yybegin(IN_DOCSTRING_OWNER); return PyTokenTypes.DEF_KEYWORD; }"); + { yybegin(IN_DOCSTRING_OWNER); return PyTokenTypes.DEF_KEYWORD; + } + // fall through + case 186: break; case 80: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [216] { return PyTokenTypes.TRY_KEYWORD; }"); + { return PyTokenTypes.TRY_KEYWORD; + } + // fall through + case 187: break; + case 81: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [203] { return PyTokenTypes.FOR_KEYWORD; }"); + { return PyTokenTypes.FOR_KEYWORD; + } + // fall through + case 188: break; + case 82: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [224] { return PyTokenTypes.EXPEQ; }"); + { return PyTokenTypes.EXPEQ; + } + // fall through + case 189: break; + case 83: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [227] { return PyTokenTypes.FLOORDIVEQ; }"); + { return PyTokenTypes.FLOORDIVEQ; + } + // fall through + case 190: break; + case 84: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [233] { return PyTokenTypes.GTGTEQ; }"); + { return PyTokenTypes.GTGTEQ; + } + // fall through + case 191: break; + case 85: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [234] { return PyTokenTypes.LTLTEQ; }"); + { return PyTokenTypes.LTLTEQ; + } + // fall through + case 192: break; + case 86: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [283] { 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; - } - case 181: break; - case 81: + } + // fall through + case 193: break; + case 87: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [286] { yypushback(getSpaceLength(yytext())); return PyTokenTypes.DOCSTRING; }"); { yypushback(getSpaceLength(yytext())); return PyTokenTypes.DOCSTRING; - } - case 182: break; - case 82: + } + // fall through + case 194: break; + case 88: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [190] { return PyTokenTypes.TRIPLE_QUOTED_STRING; }"); { return PyTokenTypes.TRIPLE_QUOTED_STRING; - } - case 183: break; - case 83: + } + // fall through + case 195: break; + case 89: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [174] { 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; - } - case 184: break; - case 84: - { return PyTokenTypes.ELSE_KEYWORD; - } - case 185: break; - case 85: - { return PyTokenTypes.ELIF_KEYWORD; - } - case 186: break; - case 86: - { return PyTokenTypes.FROM_KEYWORD; - } - case 187: break; - case 87: - { return PyTokenTypes.PASS_KEYWORD; - } - case 188: break; - case 88: - { return PyTokenTypes.RAISE_KEYWORD; - } - case 189: break; - case 89: - { return PyTokenTypes.BREAK_KEYWORD; - } - case 190: break; - case 90: - { yybegin(IN_DOCSTRING_OWNER); return PyTokenTypes.CLASS_KEYWORD; - } - case 191: break; - case 91: - { return PyTokenTypes.YIELD_KEYWORD; - } - case 192: break; - case 92: - { return PyTokenTypes.WHILE_KEYWORD; - } - case 193: break; - case 93: - { return PyTokenTypes.ASSERT_KEYWORD; - } - case 194: break; - case 94: - { return PyTokenTypes.EXCEPT_KEYWORD; - } - case 195: break; - case 95: - { return PyTokenTypes.RETURN_KEYWORD; - } + } + // fall through case 196: break; - case 96: - { return PyTokenTypes.LAMBDA_KEYWORD; - } + case 90: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [200] { return PyTokenTypes.ELSE_KEYWORD; }"); + { return PyTokenTypes.ELSE_KEYWORD; + } + // fall through case 197: break; - case 97: - { return PyTokenTypes.IMPORT_KEYWORD; - } + case 91: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [199] { return PyTokenTypes.ELIF_KEYWORD; }"); + { return PyTokenTypes.ELIF_KEYWORD; + } + // fall through case 198: break; - case 98: - { return PyTokenTypes.GLOBAL_KEYWORD; - } + case 92: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [204] { return PyTokenTypes.FROM_KEYWORD; }"); + { return PyTokenTypes.FROM_KEYWORD; + } + // fall through case 199: break; + case 93: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [213] { return PyTokenTypes.PASS_KEYWORD; }"); + { return PyTokenTypes.PASS_KEYWORD; + } + // fall through + case 200: break; + case 94: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [214] { return PyTokenTypes.RAISE_KEYWORD; }"); + { return PyTokenTypes.RAISE_KEYWORD; + } + // fall through + case 201: break; + case 95: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [194] { return PyTokenTypes.BREAK_KEYWORD; }"); + { return PyTokenTypes.BREAK_KEYWORD; + } + // fall through + case 202: break; + case 96: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [195] { yybegin(IN_DOCSTRING_OWNER); return PyTokenTypes.CLASS_KEYWORD; }"); + { yybegin(IN_DOCSTRING_OWNER); return PyTokenTypes.CLASS_KEYWORD; + } + // fall through + case 203: break; + case 97: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [218] { return PyTokenTypes.YIELD_KEYWORD; }"); + { return PyTokenTypes.YIELD_KEYWORD; + } + // fall through + case 204: break; + case 98: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [217] { return PyTokenTypes.WHILE_KEYWORD; }"); + { return PyTokenTypes.WHILE_KEYWORD; + } + // fall through + case 205: break; case 99: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [193] { return PyTokenTypes.ASSERT_KEYWORD; }"); + { return PyTokenTypes.ASSERT_KEYWORD; + } + // fall through + case 206: break; + case 100: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [215] { return PyTokenTypes.RETURN_KEYWORD; }"); + { return PyTokenTypes.RETURN_KEYWORD; + } + // fall through + case 207: break; + case 101: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [201] { return PyTokenTypes.EXCEPT_KEYWORD; }"); + { return PyTokenTypes.EXCEPT_KEYWORD; + } + // fall through + case 208: break; + case 102: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [210] { return PyTokenTypes.LAMBDA_KEYWORD; }"); + { return PyTokenTypes.LAMBDA_KEYWORD; + } + // fall through + case 209: break; + case 103: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [207] { return PyTokenTypes.IMPORT_KEYWORD; }"); + { return PyTokenTypes.IMPORT_KEYWORD; + } + // fall through + case 210: break; + case 104: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [205] { return PyTokenTypes.GLOBAL_KEYWORD; }"); + { return PyTokenTypes.GLOBAL_KEYWORD; + } + // fall through + case 211: break; + case 105: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [167] { 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; - } - case 200: break; - case 100: + } + // fall through + case 212: break; + case 106: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [202] { return PyTokenTypes.FINALLY_KEYWORD; }"); { return PyTokenTypes.FINALLY_KEYWORD; - } - case 201: break; - case 101: + } + // fall through + case 213: break; + case 107: + System.out.println("match: --"+zzToPrintable(yytext())+"--"); + System.out.println("action [196] { return PyTokenTypes.CONTINUE_KEYWORD; }"); { return PyTokenTypes.CONTINUE_KEYWORD; - } - case 202: break; + } + // fall through + case 214: break; default: zzScanError(ZZ_NO_MATCH); } @@ -1324,5 +1802,58 @@ return PyTokenTypes.DOCSTRING; } } + /** + * Runs the scanner on input files. + * + * This main method is the debugging routine for the scanner. + * It prints debugging information about each returned token to + * System.out until the end of file is reached, or an error occured. + * + * @param argv the command line, contains the filenames to run + * the scanner on. + */ + public static void main(String argv[]) { + if (argv.length == 0) { + System.out.println("Usage : java _PythonLexer [ --encoding ] "); + } + else { + int firstFilePos = 0; + String encodingName = "UTF-8"; + if (argv[0].equals("--encoding")) { + firstFilePos = 2; + encodingName = argv[1]; + try { + java.nio.charset.Charset.forName(encodingName); // Side-effect: is encodingName valid? + } catch (Exception e) { + System.out.println("Invalid encoding '" + encodingName + "'"); + return; + } + } + for (int i = firstFilePos; i < argv.length; i++) { + _PythonLexer scanner = null; + try { + java.io.FileInputStream stream = new java.io.FileInputStream(argv[i]); + java.io.Reader reader = new java.io.InputStreamReader(stream, encodingName); + scanner = new _PythonLexer(reader); + do { + System.out.println(scanner.advance()); + } while (!scanner.zzAtEOF); + + } + catch (java.io.FileNotFoundException e) { + System.out.println("File not found : \""+argv[i]+"\""); + } + catch (java.io.IOException e) { + System.out.println("IO error scanning file \""+argv[i]+"\""); + System.out.println(e); + } + catch (Exception e) { + System.out.println("Unexpected exception:"); + e.printStackTrace(); + } + } + } + } + } diff --git a/python/psi-api/src/com/jetbrains/python/PyTokenTypes.java b/python/psi-api/src/com/jetbrains/python/PyTokenTypes.java index cee9fc3437bb..52d65e52531c 100644 --- a/python/psi-api/src/com/jetbrains/python/PyTokenTypes.java +++ b/python/psi-api/src/com/jetbrains/python/PyTokenTypes.java @@ -179,5 +179,9 @@ public class PyTokenTypes { public static final PyElementType INDENT = new PyElementType("INDENT"); public static final PyElementType DEDENT = new PyElementType("DEDENT"); - PyElementType FSTRING_TEXT = new PyElementType("FSTRING_FRAGMENT"); + public static final PyElementType FSTRING_TEXT = new PyElementType("FSTRING_TEXT"); + public static final PyElementType FSTRING_START = new PyElementType("FSTRING_START"); + public static final PyElementType FSTRING_END = new PyElementType("FSTRING_END"); + public static final PyElementType FSTRING_FRAGMENT_START = new PyElementType("FSTRING_FRAGMENT_START"); + public static final PyElementType FSTRING_FRAGMENT_END = new PyElementType("FSTRING_FRAGMENT_END"); } diff --git a/python/src/com/jetbrains/python/lexer/Python.flex b/python/src/com/jetbrains/python/lexer/Python.flex index f976553349a2..b5b73bc8cc8b 100644 --- a/python/src/com/jetbrains/python/lexer/Python.flex +++ b/python/src/com/jetbrains/python/lexer/Python.flex @@ -5,6 +5,7 @@ import com.intellij.lexer.FlexLexer; import com.intellij.psi.tree.IElementType; import com.jetbrains.python.PyTokenTypes; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.util.containers.Stack;import org.jetbrains.annotations.NonNls; %% @@ -13,6 +14,8 @@ import com.intellij.openapi.util.text.StringUtil; %unicode %function advance %type IElementType +// TODO remove +%debug DIGIT = [0-9] NONZERODIGIT = [1-9] @@ -48,8 +51,8 @@ IMAGNUMBER=(({FLOATNUMBER})|({INTPART}))[Jj] // If you change patterns for string literals, don't forget to update PyStringLiteralUtil! // "c" prefix character is included for Cython -SINGLE_QUOTED_STRING=[UuBbCcRrFf]{0,3}({QUOTED_LITERAL} | {DOUBLE_QUOTED_LITERAL}) -TRIPLE_QUOTED_STRING=[UuBbCcRrFf]{0,3}({TRIPLE_QUOTED_LITERAL}|{TRIPLE_APOS_LITERAL}) +SINGLE_QUOTED_STRING=[UuBbCcRr]{0,3}({QUOTED_LITERAL} | {DOUBLE_QUOTED_LITERAL}) +TRIPLE_QUOTED_STRING=[UuBbCcRr]{0,3}({TRIPLE_QUOTED_LITERAL}|{TRIPLE_APOS_LITERAL}) DOCSTRING_LITERAL=({SINGLE_QUOTED_STRING}|{TRIPLE_QUOTED_STRING}) @@ -69,9 +72,57 @@ ONE_TWO_APOS = ('[^\\']) | ('\\[^]) | (''[^\\']) | (''\\[^]) APOS_STRING_CHAR = [^\\'] | {ANY_ESCAPE_SEQUENCE} | {ONE_TWO_APOS} TRIPLE_APOS_LITERAL = {THREE_APOS} {APOS_STRING_CHAR}* {THREE_APOS}? +FSTRING_PREFIX = [UuBbCcRr]{0,3}[fF][UuBbCcRr]{0,3} +FSTRING_START = {FSTRING_PREFIX} (\"\"\"|'''|\"|') +FSTRING_END = (\"\"\"|'''|\"|') +FSTRING_FRAGMENT_START = "{" +FSTRING_FRAGMENT_BANG = "!" +FSTRING_FRAGMENT_CONVERSION = [sra] +FSTRING_FRAGMENT_COLON = ":" +FSTRING_FRAGMENT_END = "}" +FSTRING_ESCAPED_LBRACE = "{{" +// TODO report it in annotation +//FSTRING_ESCAPED_RBRACE = "}}" +FSTRING_TEXT = ([^\\\'\r\n{] | {ESCAPE_SEQUENCE} | {FSTRING_ESCAPED_LBRACE} | (\\[\r\n]))+ + %state PENDING_DOCSTRING %state IN_DOCSTRING_OWNER +%state FSTRING +%state FSTRING_FRAGMENT +%state FSTRING_FRAGMENT_FORMAT_PART %{ +static final class FStringState { + private final int oldState; + private final int oldBraceBalance; + private final String openingQuotes; + + FStringState(int state, int braceBalance, @NonNls String fStringStart) { + oldState = state; + oldBraceBalance = braceBalance; + + String prefix = fStringStart.toLowerCase(); + prefix = StringUtil.trimLeading(prefix, 'r'); + prefix = StringUtil.trimLeading(prefix, 'f'); + prefix = StringUtil.trimLeading(prefix, 'r'); + openingQuotes = prefix; + } +} + +void pushFString() { + states.push(new FStringState(yystate(), braceBalance, yytext().toString())); + braceBalance = 0; + yybegin(FSTRING); +} + +void popFString() { + FStringState state = states.pop(); + braceBalance = state.oldBraceBalance; + yybegin(state.oldState); +} + +private final Stack states = new Stack<>(); +private int braceBalance = 0; + private int getSpaceLength(CharSequence string) { String string1 = string.toString(); string1 = StringUtil.trimEnd(string1, "\\"); @@ -89,6 +140,18 @@ return yylength()-s.length(); [\f] { return PyTokenTypes.FORMFEED; } "\\" { return PyTokenTypes.BACKSLASH; } + { + {FSTRING_TEXT} { return PyTokenTypes.FSTRING_TEXT; } + {FSTRING_END} { popFString(); return PyTokenTypes.FSTRING_END; } + "{" { yybegin(FSTRING_FRAGMENT); return PyTokenTypes.FSTRING_FRAGMENT_START; } +} + + { + "{" { braceBalance++; return PyTokenTypes.LBRACE; } + "}" { if (braceBalance == 0) { yybegin(FSTRING); return PyTokenTypes.FSTRING_FRAGMENT_END; } + else { braceBalance--; return PyTokenTypes.RBRACE; } } +} + { [\n] { if (zzCurrentPos == 0) yybegin(PENDING_DOCSTRING); return PyTokenTypes.LINE_BREAK; } {END_OF_LINE_COMMENT} { if (zzCurrentPos == 0) yybegin(PENDING_DOCSTRING); return PyTokenTypes.END_OF_LINE_COMMENT; } @@ -117,7 +180,7 @@ return PyTokenTypes.DOCSTRING; } [\n] { return PyTokenTypes.LINE_BREAK; } {END_OF_LINE_COMMENT} { return PyTokenTypes.END_OF_LINE_COMMENT; } - { + { {LONGINTEGER} { return PyTokenTypes.INTEGER_LITERAL; } {INTEGER} { return PyTokenTypes.INTEGER_LITERAL; } {FLOATNUMBER} { return PyTokenTypes.FLOAT_LITERAL; } @@ -205,6 +268,8 @@ return PyTokenTypes.DOCSTRING; } "=" { return PyTokenTypes.EQ; } ";" { return PyTokenTypes.SEMICOLON; } +{FSTRING_START} { pushFString(); return PyTokenTypes.FSTRING_START; } + [^] { return PyTokenTypes.BAD_CHARACTER; } } @@ -217,10 +282,7 @@ return PyTokenTypes.DOCSTRING; } else yybegin(YYINITIAL); return PyTokenTypes.SINGLE_QUOTED_STRING; } {TRIPLE_QUOTED_STRING} { if (zzInput == YYEOF) return PyTokenTypes.DOCSTRING; else yybegin(YYINITIAL); return PyTokenTypes.TRIPLE_QUOTED_STRING; } -{DOCSTRING_LITERAL}[\ \t]*[\n;] { yypushback(getSpaceLength(yytext())); yybegin(YYINITIAL); return PyTokenTypes.DOCSTRING; } -{DOCSTRING_LITERAL}[\ \t]*"\\" { - yypushback(getSpaceLength(yytext())); return PyTokenTypes.DOCSTRING; } - +{DOCSTRING_LITERAL}[\ \t]*[\n;] { yypushback(getSpaceLength(yytext())); yybegin(YYINITIAL); return PyTokenTypes.DOCSTRING; } +{DOCSTRING_LITERAL}[\ \t]*"\\" { yypushback(getSpaceLength(yytext())); return PyTokenTypes.DOCSTRING; } . { yypushback(1); yybegin(YYINITIAL); } } - diff --git a/python/src/com/jetbrains/python/parsing/ExpressionParsing.java b/python/src/com/jetbrains/python/parsing/ExpressionParsing.java index 815a9d9bf867..fd28db0ac85b 100644 --- a/python/src/com/jetbrains/python/parsing/ExpressionParsing.java +++ b/python/src/com/jetbrains/python/parsing/ExpressionParsing.java @@ -68,7 +68,7 @@ public class ExpressionParsing extends Parsing { buildTokenElement(PyElementTypes.BOOL_LITERAL_EXPRESSION, myBuilder); return true; } - else if (PyTokenTypes.STRING_NODES.contains(firstToken)) { + else if (PyTokenTypes.STRING_NODES.contains(firstToken) || firstToken == PyTokenTypes.FSTRING_START) { return parseStringLiteralExpression(); } else if (firstToken == PyTokenTypes.LPAR) { @@ -95,10 +95,20 @@ public class ExpressionParsing extends Parsing { public boolean parseStringLiteralExpression() { final PsiBuilder builder = myContext.getBuilder(); - if (PyTokenTypes.STRING_NODES.contains(builder.getTokenType())) { + IElementType tokenType = builder.getTokenType(); + if (PyTokenTypes.STRING_NODES.contains(tokenType) || tokenType == PyTokenTypes.FSTRING_START) { final PsiBuilder.Marker marker = builder.mark(); - while (PyTokenTypes.STRING_NODES.contains(builder.getTokenType())) { - nextToken(); + while (true) { + tokenType = builder.getTokenType(); + if (PyTokenTypes.STRING_NODES.contains(tokenType)) { + nextToken(); + } + else if (tokenType == PyTokenTypes.FSTRING_START) { + parseFormattedStringNode(); + } + else { + break; + } } marker.done(PyElementTypes.STRING_LITERAL_EXPRESSION); return true; @@ -106,6 +116,41 @@ public class ExpressionParsing extends Parsing { return false; } + private void parseFormattedStringNode() { + final PsiBuilder builder = myContext.getBuilder(); + if (builder.getTokenType() == PyTokenTypes.FSTRING_START) { + final PsiBuilder.Marker marker = builder.mark(); + nextToken(); + while (true) { + if (atToken(PyTokenTypes.FSTRING_TEXT)) { + nextToken(); + } + else if (atToken(PyTokenTypes.FSTRING_FRAGMENT_START)) { + parseFStringFragment(); + } + else if (matchToken(PyTokenTypes.FSTRING_END)) { + break; + } + else { + marker.error("Unexpected f-string token"); + break; + } + } + marker.done(PyElementTypes.FSTRING_NODE); + } + } + + private void parseFStringFragment() { + PsiBuilder builder = myContext.getBuilder(); + if (builder.getTokenType() == PyTokenTypes.FSTRING_FRAGMENT_START) { + final PsiBuilder.Marker marker = builder.mark(); + nextToken(); + myContext.getExpressionParser().parseExpression(); + checkMatches(PyTokenTypes.FSTRING_FRAGMENT_END, "} expected"); + marker.done(PyElementTypes.FSTRING_FRAGMENT); + } + } + private void parseListLiteralExpression(final PsiBuilder builder, boolean isTargetExpression) { LOG.assertTrue(builder.getTokenType() == PyTokenTypes.LBRACKET); final PsiBuilder.Marker expr = builder.mark(); diff --git a/python/testData/psi/FStringEscapedBraces.py b/python/testData/psi/FStringEscapedBraces.py new file mode 100644 index 000000000000..3e4dfc5d36f0 --- /dev/null +++ b/python/testData/psi/FStringEscapedBraces.py @@ -0,0 +1 @@ +s = f'{{}} {{{42}}} }} {{' \ No newline at end of file diff --git a/python/testData/psi/FStringEscapedBraces.txt b/python/testData/psi/FStringEscapedBraces.txt new file mode 100644 index 000000000000..ca82208724ec --- /dev/null +++ b/python/testData/psi/FStringEscapedBraces.txt @@ -0,0 +1,18 @@ +PyFile:FStringEscapedBraces.py + PyAssignmentStatement + PyTargetExpression: s + PsiElement(Py:IDENTIFIER)('s') + PsiWhiteSpace(' ') + PsiElement(Py:EQ)('=') + PsiWhiteSpace(' ') + PyStringLiteralExpression: + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('f'') + PsiElement(Py:FSTRING_TEXT)('{{}} {{') + PyFStringFragment + PsiElement(Py:FSTRING_FRAGMENT_START)('{') + PyNumericLiteralExpression + PsiElement(Py:INTEGER_LITERAL)('42') + PsiElement(Py:FSTRING_FRAGMENT_END)('}') + PsiElement(Py:FSTRING_TEXT)('}} }} {{') + PsiElement(Py:FSTRING_END)(''') \ No newline at end of file diff --git a/python/testData/psi/FStringExpressionContainBraces.py b/python/testData/psi/FStringExpressionContainBraces.py new file mode 100644 index 000000000000..16e8275294a1 --- /dev/null +++ b/python/testData/psi/FStringExpressionContainBraces.py @@ -0,0 +1 @@ +s = f'{ {1, 2} }' \ No newline at end of file diff --git a/python/testData/psi/FStringExpressionContainBraces.txt b/python/testData/psi/FStringExpressionContainBraces.txt new file mode 100644 index 000000000000..135896a8a966 --- /dev/null +++ b/python/testData/psi/FStringExpressionContainBraces.txt @@ -0,0 +1,25 @@ +PyFile:FStringExpressionContainBraces.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)('{') + PsiWhiteSpace(' ') + PySetLiteralExpression + PsiElement(Py:LBRACE)('{') + PyNumericLiteralExpression + PsiElement(Py:INTEGER_LITERAL)('1') + PsiElement(Py:COMMA)(',') + PsiWhiteSpace(' ') + PyNumericLiteralExpression + PsiElement(Py:INTEGER_LITERAL)('2') + PsiElement(Py:RBRACE)('}') + PsiWhiteSpace(' ') + PsiElement(Py:FSTRING_FRAGMENT_END)('}') + PsiElement(Py:FSTRING_END)(''') \ No newline at end of file diff --git a/python/testData/psi/FStringGluedWithLiteralStringNodes.py b/python/testData/psi/FStringGluedWithLiteralStringNodes.py new file mode 100644 index 000000000000..b2d9dff6f2ba --- /dev/null +++ b/python/testData/psi/FStringGluedWithLiteralStringNodes.py @@ -0,0 +1,3 @@ +s = ('foo' + f'{42} {True}' + ur'bar') \ No newline at end of file diff --git a/python/testData/psi/FStringGluedWithLiteralStringNodes.txt b/python/testData/psi/FStringGluedWithLiteralStringNodes.txt new file mode 100644 index 000000000000..5775e8e3de86 --- /dev/null +++ b/python/testData/psi/FStringGluedWithLiteralStringNodes.txt @@ -0,0 +1,29 @@ +PyFile:FStringGluedWithLiteralStringNodes.py + PyAssignmentStatement + PyTargetExpression: s + PsiElement(Py:IDENTIFIER)('s') + PsiWhiteSpace(' ') + PsiElement(Py:EQ)('=') + PsiWhiteSpace(' ') + PyParenthesizedExpression + PsiElement(Py:LPAR)('(') + PyStringLiteralExpression: foobar + PsiElement(Py:SINGLE_QUOTED_STRING)(''foo'') + PsiWhiteSpace('\n ') + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('f'') + PyFStringFragment + PsiElement(Py:FSTRING_FRAGMENT_START)('{') + PyNumericLiteralExpression + PsiElement(Py:INTEGER_LITERAL)('42') + PsiElement(Py:FSTRING_FRAGMENT_END)('}') + PsiWhiteSpace(' ') + PyFStringFragment + PsiElement(Py:FSTRING_FRAGMENT_START)('{') + PyBoolLiteralExpression + PsiElement(Py:TRUE_KEYWORD)('True') + PsiElement(Py:FSTRING_FRAGMENT_END)('}') + PsiElement(Py:FSTRING_END)(''') + PsiWhiteSpace('\n ') + PsiElement(Py:SINGLE_QUOTED_STRING)('ur'bar'') + PsiElement(Py:RPAR)(')') \ No newline at end of file diff --git a/python/testData/psi/FStringWithSimpleFragment.py b/python/testData/psi/FStringWithSimpleFragment.py new file mode 100644 index 000000000000..b43fe4a73f00 --- /dev/null +++ b/python/testData/psi/FStringWithSimpleFragment.py @@ -0,0 +1 @@ +s = f'foo{42}bar' \ No newline at end of file diff --git a/python/testData/psi/FStringWithSimpleFragment.txt b/python/testData/psi/FStringWithSimpleFragment.txt new file mode 100644 index 000000000000..8951a7029e90 --- /dev/null +++ b/python/testData/psi/FStringWithSimpleFragment.txt @@ -0,0 +1,18 @@ +PyFile:FStringWithSimpleFragment.py + PyAssignmentStatement + PyTargetExpression: s + PsiElement(Py:IDENTIFIER)('s') + PsiWhiteSpace(' ') + PsiElement(Py:EQ)('=') + PsiWhiteSpace(' ') + PyStringLiteralExpression: + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('f'') + PsiElement(Py:FSTRING_TEXT)('foo') + PyFStringFragment + PsiElement(Py:FSTRING_FRAGMENT_START)('{') + PyNumericLiteralExpression + PsiElement(Py:INTEGER_LITERAL)('42') + PsiElement(Py:FSTRING_FRAGMENT_END)('}') + PsiElement(Py:FSTRING_TEXT)('bar') + PsiElement(Py:FSTRING_END)(''') \ No newline at end of file diff --git a/python/testData/psi/FStrings.txt b/python/testData/psi/FStrings.txt index d7825d5f2883..fc543bae3338 100644 --- a/python/testData/psi/FStrings.txt +++ b/python/testData/psi/FStrings.txt @@ -6,7 +6,9 @@ PyFile:FStrings.py PsiElement(Py:EQ)('=') PsiWhiteSpace(' ') PyStringLiteralExpression: - PsiElement(Py:SINGLE_QUOTED_STRING)('f''') + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('f'') + PsiElement(Py:FSTRING_END)(''') PsiWhiteSpace(' \n') PyAssignmentStatement PyTargetExpression: s2 @@ -15,7 +17,9 @@ PyFile:FStrings.py PsiElement(Py:EQ)('=') PsiWhiteSpace(' ') PyStringLiteralExpression: - PsiElement(Py:SINGLE_QUOTED_STRING)('fr''') + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('fr'') + PsiElement(Py:FSTRING_END)(''') PsiWhiteSpace('\n') PyAssignmentStatement PyTargetExpression: s3 @@ -24,7 +28,9 @@ PyFile:FStrings.py PsiElement(Py:EQ)('=') PsiWhiteSpace(' ') PyStringLiteralExpression: - PsiElement(Py:SINGLE_QUOTED_STRING)('rf''') + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('rf'') + PsiElement(Py:FSTRING_END)(''') PsiWhiteSpace('\n') PyAssignmentStatement PyTargetExpression: s4 @@ -33,7 +39,9 @@ PyFile:FStrings.py PsiElement(Py:EQ)('=') PsiWhiteSpace(' ') PyStringLiteralExpression: - PsiElement(Py:SINGLE_QUOTED_STRING)('F''') + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('F'') + PsiElement(Py:FSTRING_END)(''') PsiWhiteSpace('\n') PyAssignmentStatement PyTargetExpression: s5 @@ -42,7 +50,9 @@ PyFile:FStrings.py PsiElement(Py:EQ)('=') PsiWhiteSpace(' ') PyStringLiteralExpression: - PsiElement(Py:SINGLE_QUOTED_STRING)('bf''') + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('bf'') + PsiElement(Py:FSTRING_END)(''') PsiWhiteSpace('\n') PyAssignmentStatement PyTargetExpression: s6 @@ -51,7 +61,9 @@ PyFile:FStrings.py PsiElement(Py:EQ)('=') PsiWhiteSpace(' ') PyStringLiteralExpression: - PsiElement(Py:SINGLE_QUOTED_STRING)('uf''') + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('uf'') + PsiElement(Py:FSTRING_END)(''') PsiWhiteSpace('\n') PyAssignmentStatement PyTargetExpression: s7 @@ -60,4 +72,6 @@ PyFile:FStrings.py PsiElement(Py:EQ)('=') PsiWhiteSpace(' ') PyStringLiteralExpression: - PsiElement(Py:SINGLE_QUOTED_STRING)('ufr''') \ No newline at end of file + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('ufr'') + PsiElement(Py:FSTRING_END)(''') \ 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 e507ad3d8071..4a6e0827c5db 100644 --- a/python/testSrc/com/jetbrains/python/PythonParsingTest.java +++ b/python/testSrc/com/jetbrains/python/PythonParsingTest.java @@ -369,10 +369,6 @@ public class PythonParsingTest extends ParsingTestCase { doTest(); } - public void doTest() { - doTest(LanguageLevel.PYTHON26); - } - public void testCompoundStatementAfterSemicolon() { // PY-7660 doTest(); } @@ -512,6 +508,26 @@ public class PythonParsingTest extends ParsingTestCase { doTest(LanguageLevel.PYTHON36); } + // PY-31442 + public void testFStringWithSimpleFragment() { + doTest(LanguageLevel.PYTHON36); + } + + // PY-31442 + public void testFStringGluedWithLiteralStringNodes() { + doTest(LanguageLevel.PYTHON36); + } + + // PY-31442 + public void testFStringEscapedBraces() { + doTest(LanguageLevel.PYTHON36); + } + + // PY-31442 + public void testFStringExpressionContainBraces() { + doTest(LanguageLevel.PYTHON36); + } + // PY-19036 public void testAwaitInNonAsyncNestedFunction() { doTest(LanguageLevel.PYTHON35); @@ -550,6 +566,10 @@ public class PythonParsingTest extends ParsingTestCase { doTest(); } + public void doTest() { + doTest(LanguageLevel.PYTHON26); + } + public void doTest(LanguageLevel languageLevel) { LanguageLevel prev = myLanguageLevel; myLanguageLevel = languageLevel;