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;