/* The following code was generated by JFlex 1.7.0-SNAPSHOT tweaked for IntelliJ platform */
package org.elixir_lang;
import com.intellij.lexer.FlexLexer;
import com.intellij.psi.TokenType;
import com.intellij.psi.tree.IElementType;
import org.elixir_lang.lexer.group.*;
import org.elixir_lang.psi.ElixirTypes;
/**
* This class is a scanner generated by
* <a href="http://www.jflex.de/">JFlex</a> 1.7.0-SNAPSHOT
* from the specification file <tt>Elixir.flex</tt>
*/
public class ElixirFlexLexer implements FlexLexer {
/** This character denotes the end of file */
public static final int YYEOF = -1;
/** initial size of the lookahead buffer */
private static final int ZZ_BUFFERSIZE = 16384;
/** lexical states */
public static final int YYINITIAL = 0;
public static final int ATOM_START = 2;
public static final int BASE_WHOLE_NUMBER_BASE = 4;
public static final int BINARY_WHOLE_NUMBER = 6;
public static final int CALL_MAYBE = 8;
public static final int CALL_OR_KEYWORD_PAIR_MAYBE = 10;
public static final int CHAR_TOKENIZATION = 12;
public static final int DECIMAL_EXPONENT = 14;
public static final int DECIMAL_EXPONENT_SIGN = 16;
public static final int DECIMAL_FRACTION = 18;
public static final int DECIMAL_WHOLE_NUMBER = 20;
public static final int DOT_OPERATION = 22;
public static final int DUAL_OPERATION = 24;
public static final int ESCAPE_IN_LITERAL_GROUP = 26;
public static final int ESCAPE_SEQUENCE = 28;
public static final int EXTENDED_HEXADECIMAL_ESCAPE_SEQUENCE = 30;
public static final int GROUP = 32;
public static final int GROUP_HEREDOC_END = 34;
public static final int GROUP_HEREDOC_LINE_BODY = 36;
public static final int GROUP_HEREDOC_LINE_ESCAPED_EOL = 38;
public static final int GROUP_HEREDOC_LINE_START = 40;
public static final int GROUP_HEREDOC_START = 42;
public static final int HEXADECIMAL_ESCAPE_SEQUENCE = 44;
public static final int HEXADECIMAL_WHOLE_NUMBER = 46;
public static final int INTERPOLATION = 48;
public static final int KEYWORD_PAIR_MAYBE = 50;
public static final int NAMED_SIGIL = 52;
public static final int OCTAL_WHOLE_NUMBER = 54;
public static final int REFERENCE_OPERATION = 56;
public static final int SIGIL = 58;
public static final int SIGIL_MODIFIERS = 60;
public static final int UNICODE_ESCAPE_SEQUENCE = 62;
public static final int UNKNOWN_BASE_WHOLE_NUMBER = 64;
/**
* ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l
* ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l
* at the beginning of a line
* 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, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7,
8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15,
16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23,
24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 30, 30, 31, 31,
32, 32
};
/**
* Translates characters to character classes
* Chosen bits are [9, 6, 6]
* Total runtime size is 1568 bytes
*/
public static int ZZ_CMAP(int ch) {
return ZZ_CMAP_A[(ZZ_CMAP_Y[ZZ_CMAP_Z[ch>>12]|((ch>>6)&0x3f)]<<6)|(ch&0x3f)];
}
/* The ZZ_CMAP_Z table has 272 entries */
static final char ZZ_CMAP_Z[] = zzUnpackCMap(
"\1\0\1\100\1\200\u010d\100");
/* The ZZ_CMAP_Y table has 192 entries */
static final char ZZ_CMAP_Y[] = zzUnpackCMap(
"\1\0\1\1\1\2\175\3\1\4\77\3");
/* The ZZ_CMAP_A table has 320 entries */
static final char ZZ_CMAP_A[] = zzUnpackCMap(
"\11\0\1\53\1\51\1\76\1\54\1\52\22\0\1\53\1\16\1\75\1\56\1\0\1\20\1\11\1\74"+
"\1\55\1\73\1\34\1\30\1\46\1\25\1\24\1\35\1\60\1\63\6\66\2\37\1\31\1\50\1\3"+
"\1\17\1\4\1\36\1\32\1\47\1\62\2\47\1\70\1\47\21\57\1\65\2\57\1\72\1\26\1\71"+
"\1\21\1\40\1\0\1\12\1\61\1\42\1\13\1\7\1\41\1\67\1\6\1\33\2\67\1\43\1\67\1"+
"\10\1\22\2\67\1\27\1\44\1\23\1\45\1\67\1\5\1\64\2\67\1\1\1\15\1\2\1\14\6\0"+
"\1\76\242\0\2\76\26\0");
/**
* Translates DFA states to action switch labels.
*/
private static final int [] ZZ_ACTION = zzUnpackAction();
private static final String ZZ_ACTION_PACKED_0 =
"\43\0\1\1\1\2\1\3\2\4\4\5\1\6\2\5"+
"\1\7\1\10\1\11\1\12\1\13\1\11\2\5\1\14"+
"\1\15\1\1\1\5\1\15\1\16\1\17\1\5\1\20"+
"\1\21\1\22\2\5\1\23\1\24\1\25\1\26\1\0"+
"\1\27\1\30\1\31\1\22\1\32\1\33\1\34\2\35"+
"\1\1\4\36\1\1\7\36\1\1\1\36\1\1\1\36"+
"\1\0\1\37\1\40\1\41\1\42\1\43\1\44\1\45"+
"\1\46\1\47\1\0\1\50\1\51\1\0\1\52\1\53"+
"\1\0\1\54\1\55\1\0\1\56\1\57\1\60\1\61"+
"\1\0\1\62\1\63\1\0\1\64\1\56\1\65\2\66"+
"\4\67\1\70\2\67\1\65\1\71\1\72\1\73\1\74"+
"\1\72\2\67\1\65\1\75\1\65\1\67\1\75\1\76"+
"\1\67\1\77\2\67\2\100\1\101\1\102\1\103\1\0"+
"\1\104\1\105\1\106\1\0\1\107\1\110\1\111\1\112"+
"\1\113\1\114\1\0\1\112\1\0\1\115\1\116\1\0"+
"\1\117\1\0\1\120\1\0\1\121\1\120\1\122\1\0"+
"\1\1\1\123\1\124\1\125\1\126\1\111\1\0\1\127"+
"\2\130\1\0\2\131\1\132\1\133\1\0\1\134\1\0"+
"\1\135\1\27\1\136\1\137\1\140\1\0\1\124\1\141"+
"\1\142\30\0\1\143\1\144\1\145\1\0\1\4\1\146"+
"\1\147\2\0\1\150\6\5\1\151\2\5\1\152\1\0"+
"\1\145\1\153\1\154\1\155\1\154\2\0\1\153\1\5"+
"\1\144\1\156\1\27\1\0\1\5\1\157\1\160\1\161"+
"\1\162\2\5\1\24\1\0\1\163\3\0\1\36\1\0"+
"\1\36\1\0\2\36\2\0\1\36\1\164\1\0\1\165"+
"\1\166\1\0\1\66\1\167\6\67\1\170\2\67\1\171"+
"\1\0\1\166\1\172\2\173\1\0\1\172\1\67\1\165"+
"\1\174\1\67\1\175\2\67\2\0\1\111\1\176\1\177"+
"\1\0\1\200\1\0\1\201\4\0\1\124\1\202\1\0"+
"\1\27\1\0\1\124\17\0\1\5\1\203\1\5\1\11"+
"\1\204\2\151\1\5\1\11\1\153\1\0\1\205\3\5"+
"\1\206\2\5\1\207\1\210\1\67\1\211\1\67\1\72"+
"\1\212\2\170\1\67\1\72\1\172\1\213\4\67\1\214"+
"\1\111\1\215\1\0\1\216\1\217\1\220\1\221\1\0"+
"\1\222\1\223\1\5\1\0\1\224\3\5\1\225\1\226"+
"\1\67\1\227\3\67\1\111\1\230\1\0\1\231\1\232"+
"\1\5\1\233\1\234\1\235\1\67\1\236\1\237\1\111"+
"\1\240\1\241\1\242\1\111";
private static int [] zzUnpackAction() {
int [] result = new int[435];
int offset = 0;
offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
return result;
}
private static int zzUnpackAction(String packed, int offset, int [] result) {
int i = 0; /* index in packed string */
int j = offset; /* index in unpacked array */
int l = packed.length();
while (i < l) {
int count = packed.charAt(i++);
int value = packed.charAt(i++);
do result[j++] = value; while (--count > 0);
}
return j;
}
/**
* Translates a state to a row index in the transition table
*/
private static final int [] ZZ_ROWMAP = zzUnpackRowMap();
private static final String ZZ_ROWMAP_PACKED_0 =
"\0\0\0\77\0\176\0\275\0\374\0\u013b\0\u017a\0\u01b9"+
"\0\u01f8\0\u0237\0\u0276\0\u02b5\0\u02f4\0\u0333\0\u0372\0\u03b1"+
"\0\u03f0\0\u042f\0\u046e\0\u04ad\0\u04ec\0\u052b\0\u056a\0\u05a9"+
"\0\u05e8\0\u0627\0\u0666\0\u06a5\0\u06e4\0\u0723\0\u0762\0\u07a1"+
"\0\u07e0\0\u081f\0\u085e\0\u089d\0\u08dc\0\u089d\0\u091b\0\u095a"+
"\0\u0999\0\u09d8\0\u0a17\0\u0a56\0\u0a95\0\u0ad4\0\u0b13\0\u0b52"+
"\0\u0b91\0\u0bd0\0\u0c0f\0\u0c4e\0\u0c8d\0\u0ccc\0\u0d0b\0\u0d4a"+
"\0\u0d89\0\u0dc8\0\u0e07\0\u0e46\0\u0e85\0\u0ec4\0\u0f03\0\u0ec4"+
"\0\u089d\0\u0f42\0\u0f81\0\u0fc0\0\u089d\0\u0fff\0\u089d\0\u089d"+
"\0\u103e\0\u107d\0\u089d\0\u10bc\0\u10fb\0\u089d\0\u089d\0\u089d"+
"\0\u113a\0\u1179\0\u11b8\0\u11f7\0\u1236\0\u1275\0\u12b4\0\u12f3"+
"\0\u1332\0\u1371\0\u13b0\0\u13ef\0\u142e\0\u146d\0\u14ac\0\u14eb"+
"\0\u152a\0\u1569\0\u089d\0\u15a8\0\u089d\0\u089d\0\u089d\0\u089d"+
"\0\u089d\0\u089d\0\u089d\0\u089d\0\u15e7\0\u1626\0\u1665\0\u089d"+
"\0\u16a4\0\u089d\0\u089d\0\u16e3\0\u089d\0\u089d\0\u1722\0\u089d"+
"\0\u1761\0\u17a0\0\u089d\0\u17df\0\u089d\0\u089d\0\u181e\0\u1761"+
"\0\u185d\0\u089d\0\u189c\0\u18db\0\u191a\0\u1959\0\u1998\0\u19d7"+
"\0\u1a16\0\u1a55\0\u1a94\0\u1ad3\0\u1b12\0\u1b51\0\u1b90\0\u089d"+
"\0\u1bcf\0\u1c0e\0\u1c4d\0\u1c8c\0\u1ccb\0\u1d0a\0\u1d49\0\u1d88"+
"\0\u089d\0\u1dc7\0\u089d\0\u1e06\0\u1e45\0\u1e84\0\u1ec3\0\u1f02"+
"\0\u089d\0\u089d\0\u1f41\0\u089d\0\u089d\0\u089d\0\u1f80\0\u089d"+
"\0\u089d\0\u1fbf\0\u089d\0\u089d\0\u1ffe\0\u203d\0\u207c\0\u20bb"+
"\0\u20fa\0\u089d\0\u2139\0\u089d\0\u2178\0\u089d\0\u21b7\0\u21f6"+
"\0\u2235\0\u089d\0\u2274\0\u22b3\0\u089d\0\u22f2\0\u089d\0\u2331"+
"\0\u2370\0\u23af\0\u089d\0\u089d\0\u23ee\0\u242d\0\u089d\0\u246c"+
"\0\u089d\0\u24ab\0\u24ea\0\u2529\0\u2568\0\u089d\0\u25a7\0\u089d"+
"\0\u089d\0\u089d\0\u25e6\0\u2625\0\u089d\0\u2664\0\u26a3\0\u26e2"+
"\0\u2721\0\u2760\0\u279f\0\u27de\0\u281d\0\u285c\0\u289b\0\u28da"+
"\0\u2919\0\u2958\0\u2997\0\u29d6\0\u2a15\0\u2a54\0\u2a93\0\u2ad2"+
"\0\u2b11\0\u2b50\0\u089d\0\u2b8f\0\u2bce\0\u2c0d\0\u2c4c\0\u0ec4"+
"\0\u2c8b\0\u2cca\0\u0ec4\0\u0ec4\0\u089d\0\u0ec4\0\u2d09\0\u2cca"+
"\0\u2d48\0\u089d\0\u2d87\0\u2dc6\0\u2e05\0\u2e44\0\u2e83\0\u2ec2"+
"\0\u2f01\0\u09d8\0\u2f40\0\u0ec4\0\u2f7f\0\u2fbe\0\u0ec4\0\u0ec4"+
"\0\u2ffd\0\u303c\0\u307b\0\u30ba\0\u30f9\0\u0ec4\0\u3138\0\u3177"+
"\0\u31b6\0\u31f5\0\u089d\0\u307b\0\u09d8\0\u3234\0\u3273\0\u089d"+
"\0\u32b2\0\u089d\0\u32f1\0\u3330\0\u336f\0\u33ae\0\u33ae\0\u33ed"+
"\0\u342c\0\u346b\0\u34aa\0\u11b8\0\u34e9\0\u3528\0\u185d\0\u3567"+
"\0\u089d\0\u35a6\0\u35a6\0\u089d\0\u089d\0\u35e5\0\u089d\0\u3624"+
"\0\u3663\0\u36a2\0\u36e1\0\u3720\0\u375f\0\u379e\0\u1959\0\u37dd"+
"\0\u089d\0\u381c\0\u385b\0\u089d\0\u389a\0\u1959\0\u38d9\0\u3918"+
"\0\u089d\0\u3957\0\u1959\0\u3996\0\u39d5\0\u3a14\0\u3a53\0\u3a92"+
"\0\u089d\0\u089d\0\u3ad1\0\u089d\0\u3b10\0\u089d\0\u3b4f\0\u3b8e"+
"\0\u3bcd\0\u3c0c\0\u089d\0\u089d\0\u3c4b\0\u089d\0\u3c8a\0\u3cc9"+
"\0\u3d08\0\u3d47\0\u3d47\0\u3d86\0\u3dc5\0\u3e04\0\u3e43\0\u3e82"+
"\0\u3ec1\0\u3f00\0\u3f3f\0\u3f7e\0\u3fbd\0\u3ffc\0\u403b\0\u407a"+
"\0\u09d8\0\u40b9\0\u307b\0\u09d8\0\u0ec4\0\u307b\0\u40f8\0\u0ec4"+
"\0\u0ec4\0\u4137\0\u0ec4\0\u4176\0\u0ec4\0\u41b5\0\u089d\0\u41f4"+
"\0\u4233\0\u089d\0\u089d\0\u4272\0\u1959\0\u42b1\0\u1959\0\u1959"+
"\0\u089d\0\u1959\0\u42f0\0\u089d\0\u089d\0\u089d\0\u432f\0\u436e"+
"\0\u43ad\0\u43ec\0\u089d\0\u442b\0\u089d\0\u446a\0\u089d\0\u089d"+
"\0\u089d\0\u089d\0\u44a9\0\u307b\0\u09d8\0\u44e8\0\u4527\0\u09d8"+
"\0\u4566\0\u45a5\0\u45e4\0\u1959\0\u1959\0\u4623\0\u1959\0\u4662"+
"\0\u46a1\0\u46e0\0\u471f\0\u089d\0\u475e\0\u09d8\0\u089d\0\u479d"+
"\0\u09d8\0\u09d8\0\u1959\0\u47dc\0\u1959\0\u1959\0\u481b\0\u089d"+
"\0\u09d8\0\u1959\0\u089d";
private static int [] zzUnpackRowMap() {
int [] result = new int[435];
int offset = 0;
offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
return result;
}
private static int zzUnpackRowMap(String packed, int offset, int [] result) {
int i = 0; /* index in packed string */
int j = offset; /* index in unpacked array */
int l = packed.length();
while (i < l) {
int high = packed.charAt(i++) << 16;
result[j++] = high | packed.charAt(i++);
}
return j;
}
/**
* The transition table of the DFA
*/
private static final int [] ZZ_TRANS = zzUnpackTrans();
private static final String ZZ_TRANS_PACKED_0 =
"\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\72\1\73"+
"\1\74\1\75\1\76\1\77\2\100\1\101\1\102\1\52"+
"\1\103\1\104\3\52\1\105\1\106\1\107\1\110\1\111"+
"\2\112\1\113\1\114\1\106\1\115\1\52\1\106\1\102"+
"\1\52\1\106\1\102\1\52\1\106\1\116\1\117\1\120"+
"\1\121\1\122\1\0\1\44\1\123\1\44\1\124\1\125"+
"\4\126\1\127\2\126\1\130\1\131\1\132\1\133\1\134"+
"\1\135\2\126\1\136\1\137\1\140\1\126\1\141\1\142"+
"\1\143\1\126\2\143\2\44\6\126\1\44\1\126\2\44"+
"\1\144\1\44\1\0\2\44\1\126\1\44\2\126\1\44"+
"\2\126\1\44\2\126\3\44\2\145\6\0\4\146\1\0"+
"\2\146\6\0\1\147\1\146\3\0\1\146\3\0\1\146"+
"\5\0\5\146\1\0\1\146\7\0\1\146\1\0\1\150"+
"\1\151\1\0\1\152\1\153\1\0\2\146\6\0\5\154"+
"\4\155\1\154\2\155\6\154\2\155\3\154\1\155\3\154"+
"\1\155\3\154\1\155\1\154\5\155\1\154\1\155\2\154"+
"\1\156\1\154\1\0\2\154\1\155\1\157\2\155\1\157"+
"\5\155\5\154\1\0\52\160\1\161\1\160\1\0\1\162"+
"\14\160\1\162\3\160\1\0\52\163\1\164\1\163\1\0"+
"\1\162\14\163\1\162\3\163\1\0\26\165\1\166\23\165"+
"\1\167\1\165\1\0\21\165\1\0\5\170\4\171\1\170"+
"\2\171\6\170\2\171\3\170\1\171\3\170\1\171\3\170"+
"\1\172\1\173\5\171\1\170\1\171\2\170\1\174\1\170"+
"\1\0\2\170\1\171\1\172\2\171\1\172\2\171\1\172"+
"\2\171\5\170\1\0\25\175\1\176\2\175\1\176\21\175"+
"\1\177\1\175\1\0\21\175\1\0\5\170\2\171\1\200"+
"\1\171\1\170\2\171\6\170\2\171\3\170\1\171\3\170"+
"\1\171\3\170\1\172\1\173\5\171\1\170\1\171\2\170"+
"\1\174\1\170\1\0\2\170\1\171\1\172\2\171\1\172"+
"\2\171\1\172\1\171\1\200\5\170\1\0\5\170\4\171"+
"\1\170\2\171\6\170\2\171\1\201\2\170\1\171\3\170"+
"\1\171\3\170\1\172\1\173\5\171\1\170\1\171\2\170"+
"\1\174\1\170\1\0\2\170\1\171\1\172\2\171\1\172"+
"\2\171\1\172\2\171\5\170\1\0\3\202\1\203\1\204"+
"\1\205\1\206\1\207\1\210\1\211\1\212\1\213\1\214"+
"\1\215\1\216\1\217\1\220\1\221\1\222\1\223\1\224"+
"\1\225\1\226\1\227\1\230\1\202\1\231\1\232\2\233"+
"\2\202\1\206\1\234\1\235\3\206\3\202\1\110\1\111"+
"\2\112\1\202\1\114\2\202\1\206\2\202\1\206\2\202"+
"\1\206\4\202\1\236\1\237\1\0\52\163\1\164\2\240"+
"\21\163\1\0\51\241\1\242\1\243\1\241\1\0\21\241"+
"\1\0\45\244\1\245\3\244\1\246\1\247\1\244\1\0"+
"\7\244\1\250\11\244\1\0\2\44\1\251\4\44\1\252"+
"\2\44\2\252\23\44\1\252\1\44\2\252\4\44\1\252"+
"\1\44\2\0\1\44\1\0\3\44\4\252\2\44\1\252"+
"\1\44\1\252\5\44\1\0\2\253\1\254\1\253\1\254"+
"\10\253\1\254\10\253\1\255\6\253\1\254\14\253\1\256"+
"\1\253\1\0\1\253\1\257\12\253\1\254\1\253\3\254"+
"\75\0\2\260\1\0\26\253\1\261\22\253\1\262\1\263"+
"\1\253\1\0\1\253\1\257\17\253\52\0\1\264\1\265"+
"\24\0\52\266\1\267\2\270\17\266\2\271\1\0\51\44"+
"\1\272\1\273\1\44\1\0\17\44\2\274\1\0\1\170"+
"\1\275\5\170\1\276\2\170\2\276\23\170\1\276\1\170"+
"\2\276\4\170\1\276\2\170\1\174\1\170\1\0\3\170"+
"\4\276\2\170\1\276\1\170\1\276\5\170\1\0\5\277"+
"\2\300\1\301\1\300\1\277\2\301\6\277\2\300\3\277"+
"\1\300\3\277\1\300\3\277\1\301\1\277\2\301\3\300"+
"\1\277\1\301\2\277\1\302\1\277\1\0\2\277\1\300"+
"\4\301\2\300\1\301\1\300\1\301\5\277\1\0\1\44"+
"\1\45\1\303\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\72\1\73\1\74"+
"\1\75\1\76\1\77\2\100\1\101\1\102\1\52\1\103"+
"\1\104\3\52\1\105\1\106\1\107\1\110\1\111\2\112"+
"\1\113\1\114\1\106\1\115\1\52\1\106\1\102\1\52"+
"\1\106\1\102\1\52\1\106\1\116\1\117\1\120\1\121"+
"\1\122\1\0\31\304\1\305\20\304\1\306\1\304\1\0"+
"\21\304\1\0\1\44\1\307\1\44\1\307\11\44\1\307"+
"\17\44\1\307\14\44\1\144\1\44\1\0\1\307\14\44"+
"\1\307\1\44\2\310\1\0\5\311\4\312\1\311\2\312"+
"\6\311\2\312\3\311\1\312\3\311\1\312\3\311\1\312"+
"\1\311\5\312\1\311\1\312\2\311\1\313\1\311\1\0"+
"\2\311\1\312\1\314\2\312\1\314\2\312\1\314\2\312"+
"\5\311\27\0\1\315\6\0\1\316\13\0\1\110\1\111"+
"\2\317\22\0\5\44\4\320\1\44\2\320\6\44\2\320"+
"\3\44\1\320\3\44\1\320\5\44\5\320\1\44\1\320"+
"\2\44\1\144\1\44\1\0\2\44\1\320\1\44\2\320"+
"\1\44\2\320\1\44\2\320\5\44\1\0\5\321\4\322"+
"\1\321\2\322\6\321\2\322\3\321\1\322\3\321\1\322"+
"\5\321\5\322\4\321\1\323\1\321\1\0\4\321\1\322"+
"\2\321\1\322\2\321\1\322\6\321\1\0\1\170\1\275"+
"\5\170\1\324\2\170\2\324\23\170\1\324\1\170\2\324"+
"\4\170\1\324\2\170\1\174\1\170\1\0\3\170\4\324"+
"\2\170\1\324\1\170\1\324\5\170\1\0\5\325\4\326"+
"\1\325\2\326\6\325\2\326\3\325\1\326\3\325\1\326"+
"\3\325\1\326\1\325\5\326\1\325\1\326\2\325\1\327"+
"\1\325\1\0\2\325\12\326\5\325\2\0\1\330\1\0"+
"\1\331\1\332\1\333\2\0\1\334\1\335\1\336\1\0"+
"\1\337\1\340\1\341\1\342\1\343\1\344\1\345\1\0"+
"\1\346\1\347\1\350\1\0\1\351\1\352\1\353\1\354"+
"\2\353\76\0\1\355\142\0\1\356\77\0\1\357\1\360"+
"\7\0\1\361\1\362\1\0\1\363\5\0\1\364\7\0"+
"\1\365\13\0\1\366\1\367\2\366\26\0\1\370\12\0"+
"\1\363\15\0\1\365\13\0\1\366\1\367\2\366\27\0"+
"\1\52\1\371\2\52\1\0\2\52\2\0\1\372\3\0"+
"\2\52\3\0\1\52\3\0\1\52\2\0\1\372\7\52"+
"\1\0\1\52\7\0\12\52\13\0\4\52\1\0\2\52"+
"\2\0\1\372\3\0\2\52\3\0\1\52\3\0\1\52"+
"\2\0\1\372\7\52\1\0\1\52\7\0\12\52\13\0"+
"\3\52\1\373\1\0\2\52\2\0\1\372\3\0\2\52"+
"\3\0\1\52\3\0\1\52\2\0\1\372\4\52\1\374"+
"\2\52\1\0\1\52\7\0\12\52\13\0\4\52\1\0"+
"\2\52\2\0\1\372\3\0\1\375\1\52\3\0\1\52"+
"\3\0\1\376\2\0\1\372\7\52\1\0\1\52\7\0"+
"\12\52\17\0\1\377\23\0\1\365\13\0\1\366\1\367"+
"\2\366\27\0\3\52\1\u0100\1\0\2\52\2\0\1\372"+
"\3\0\2\52\3\0\1\52\3\0\1\52\2\0\1\372"+
"\2\52\1\u0101\4\52\1\0\1\52\7\0\12\52\13\0"+
"\4\52\1\0\2\52\2\0\1\372\3\0\1\u0102\1\52"+
"\3\0\1\52\3\0\1\52\2\0\1\372\7\52\1\0"+
"\1\52\7\0\12\52\12\0\1\361\7\0\1\u0103\66\0"+
"\1\u0104\10\0\1\u0105\17\0\1\365\13\0\1\366\1\367"+
"\2\366\41\0\1\u0106\15\0\1\365\13\0\1\366\1\367"+
"\2\366\26\0\1\u0107\7\0\1\u0108\2\0\1\u0106\15\0"+
"\1\365\13\0\1\366\1\367\2\366\23\0\1\u0109\116\0"+
"\1\u010a\13\0\1\365\13\0\1\366\1\367\2\366\27\0"+
"\4\52\1\0\2\52\2\0\1\372\3\0\2\52\3\0"+
"\1\u010b\3\0\1\52\2\0\1\372\7\52\1\0\1\52"+
"\7\0\12\52\13\0\4\52\1\0\2\52\2\0\1\372"+
"\3\0\2\52\3\0\1\u010c\3\0\1\52\2\0\1\372"+
"\7\52\1\0\1\52\7\0\12\52\32\0\1\u010d\56\0"+
"\1\u010e\20\0\1\360\7\0\1\365\13\0\1\366\1\367"+
"\2\366\50\0\1\364\22\0\1\u010f\1\u0110\31\0\2\52"+
"\1\u0111\1\52\1\0\2\52\2\0\1\372\3\0\2\52"+
"\3\0\1\52\3\0\1\52\2\0\1\372\7\52\1\0"+
"\1\52\7\0\12\52\36\0\1\360\4\0\1\365\13\0"+
"\1\366\1\367\2\366\53\0\1\u0112\17\0\3\u0113\60\0"+
"\1\365\13\0\1\366\1\367\2\366\27\0\3\52\1\u0114"+
"\1\0\2\52\2\0\1\372\3\0\2\52\3\0\1\52"+
"\3\0\1\52\2\0\1\372\7\52\1\0\1\52\7\0"+
"\12\52\45\0\1\102\20\0\1\102\2\0\1\102\2\0"+
"\1\102\15\0\3\52\1\u0115\1\0\1\u0116\1\52\2\0"+
"\1\372\3\0\2\52\3\0\1\52\3\0\1\52\2\0"+
"\1\372\7\52\1\0\1\52\7\0\12\52\13\0\4\52"+
"\1\0\1\u0117\1\52\2\0\1\372\3\0\2\52\3\0"+
"\1\52\3\0\1\52\2\0\1\372\7\52\1\0\1\52"+
"\7\0\12\52\13\0\4\106\1\0\2\106\2\0\1\u0118"+
"\3\0\2\106\3\0\1\106\3\0\1\106\2\0\1\u0118"+
"\7\106\1\0\1\106\7\0\12\106\57\0\1\110\52\0"+
"\1\u0119\2\0\1\u0119\22\0\2\112\22\0\51\114\2\0"+
"\24\114\5\0\4\u011a\1\0\2\u011a\6\0\2\u011a\3\0"+
"\1\u011a\3\0\1\u011a\3\0\1\102\1\0\5\u011a\1\0"+
"\1\u011a\7\0\1\u011a\1\102\2\u011a\1\102\2\u011a\1\102"+
"\2\u011a\102\0\1\u011b\77\0\1\u011c\3\0\1\143\77\0"+
"\1\u011d\1\143\7\0\1\u011e\1\u011f\1\0\1\143\5\0"+
"\1\143\55\0\1\u011f\12\0\1\143\64\0\4\126\1\0"+
"\2\126\2\0\1\143\3\0\2\126\3\0\1\126\2\0"+
"\2\126\2\0\1\143\7\126\1\0\1\126\7\0\12\126"+
"\17\0\1\u0120\71\0\1\u011e\7\0\1\u0121\66\0\1\143"+
"\10\0\1\u0122\100\0\1\u0123\63\0\1\143\7\0\1\143"+
"\2\0\1\u0123\60\0\1\u0124\116\0\1\u0125\101\0\1\u0126"+
"\56\0\1\143\20\0\1\143\77\0\1\143\100\0\1\143"+
"\77\0\1\143\116\0\1\44\32\0\4\155\1\0\2\155"+
"\6\0\2\155\3\0\1\155\3\0\1\155\3\0\1\155"+
"\1\0\5\155\1\0\1\155\7\0\1\155\1\0\2\155"+
"\1\0\5\155\57\0\1\154\105\0\1\157\2\0\1\157"+
"\64\0\1\160\76\0\1\163\76\0\1\165\32\0\4\171"+
"\1\0\2\171\6\0\2\171\3\0\1\171\3\0\1\171"+
"\5\0\5\171\1\0\1\171\7\0\1\171\1\0\2\171"+
"\1\0\2\171\1\0\2\171\45\0\1\172\20\0\1\172"+
"\2\0\1\172\2\0\1\172\61\0\1\170\76\0\1\175"+
"\64\0\1\u0127\20\0\1\u0127\2\0\1\u0127\2\0\1\u0127"+
"\13\0\1\u0128\1\u0129\7\0\1\u012a\1\u012b\1\0\1\u012c"+
"\5\0\1\u012d\55\0\1\u012b\12\0\1\u012c\64\0\1\206"+
"\1\u012e\2\206\1\0\2\206\2\0\1\u012f\3\0\2\206"+
"\3\0\1\206\3\0\1\206\2\0\1\u012f\7\206\1\0"+
"\1\206\7\0\12\206\13\0\4\206\1\0\2\206\2\0"+
"\1\u012f\3\0\2\206\3\0\1\206\3\0\1\206\2\0"+
"\1\u012f\7\206\1\0\1\206\7\0\12\206\13\0\3\206"+
"\1\u0130\1\0\2\206\2\0\1\u012f\3\0\2\206\3\0"+
"\1\206\3\0\1\206\2\0\1\u012f\4\206\1\u0131\2\206"+
"\1\0\1\206\7\0\12\206\13\0\4\206\1\0\2\206"+
"\2\0\1\u012f\3\0\1\u0132\1\206\3\0\1\206\3\0"+
"\1\u0133\2\0\1\u012f\7\206\1\0\1\206\7\0\12\206"+
"\17\0\1\u0134\72\0\3\206\1\u0135\1\0\2\206\2\0"+
"\1\u012f\3\0\2\206\3\0\1\206\3\0\1\206\2\0"+
"\1\u012f\2\206\1\u0136\4\206\1\0\1\206\7\0\12\206"+
"\13\0\4\206\1\0\2\206\2\0\1\u012f\3\0\1\u0137"+
"\1\206\3\0\1\206\3\0\1\206\2\0\1\u012f\7\206"+
"\1\0\1\206\7\0\12\206\12\0\1\u012a\7\0\1\u0138"+
"\66\0\1\u0139\10\0\1\u013a\100\0\1\u013b\73\0\1\u013c"+
"\2\0\1\u013b\100\0\1\u013d\62\0\4\206\1\0\2\206"+
"\2\0\1\u012f\3\0\2\206\3\0\1\u013e\3\0\1\206"+
"\2\0\1\u012f\7\206\1\0\1\206\7\0\12\206\13\0"+
"\4\206\1\0\2\206\2\0\1\u012f\3\0\2\206\3\0"+
"\1\u013f\3\0\1\206\2\0\1\u012f\7\206\1\0\1\206"+
"\7\0\12\206\32\0\1\u0140\56\0\1\u0141\20\0\1\u0129"+
"\77\0\1\u012d\22\0\1\u010f\1\u0110\31\0\2\206\1\u0142"+
"\1\206\1\0\2\206\2\0\1\u012f\3\0\2\206\3\0"+
"\1\206\3\0\1\206\2\0\1\u012f\7\206\1\0\1\206"+
"\7\0\12\206\36\0\1\u0129\53\0\3\206\1\u0143\1\0"+
"\2\206\2\0\1\u012f\3\0\2\206\3\0\1\206\3\0"+
"\1\206\2\0\1\u012f\7\206\1\0\1\206\7\0\12\206"+
"\13\0\4\206\1\0\1\u0144\1\206\2\0\1\u012f\3\0"+
"\2\206\3\0\1\206\3\0\1\206\2\0\1\u012f\7\206"+
"\1\0\1\206\7\0\12\206\13\0\4\206\1\0\1\u0145"+
"\1\206\2\0\1\u012f\3\0\2\206\3\0\1\206\3\0"+
"\1\206\2\0\1\u012f\7\206\1\0\1\206\7\0\12\206"+
"\102\0\1\u0146\77\0\1\u0147\54\0\2\240\73\0\1\242"+
"\76\0\1\246\34\0\1\u0148\2\0\2\u0148\23\0\1\u0148"+
"\1\0\2\u0148\4\0\1\u0148\10\0\4\u0148\2\0\1\u0148"+
"\1\0\1\u0148\10\0\1\u0149\1\0\1\u0149\10\0\1\u0149"+
"\17\0\1\u0149\13\0\1\u014a\1\u014b\16\0\1\u0149\1\0"+
"\3\u0149\52\0\1\253\26\0\1\u014c\171\0\2\u014d\52\0"+
"\1\u014e\1\u014f\75\0\1\262\76\0\1\264\76\0\1\266"+
"\100\0\2\270\17\0\2\u0150\75\0\2\u0151\52\0\1\272"+
"\121\0\2\u0152\10\0\1\u0153\2\0\2\u0153\23\0\1\u0153"+
"\1\0\2\u0153\4\0\1\u0153\10\0\4\u0153\2\0\1\u0153"+
"\1\0\1\u0153\13\0\2\300\1\0\1\300\11\0\2\300"+
"\3\0\1\300\3\0\1\300\7\0\3\300\11\0\1\300"+
"\4\0\2\300\1\0\1\300\16\0\1\301\2\0\2\301"+
"\23\0\1\301\1\0\2\301\4\0\1\301\10\0\4\301"+
"\2\0\1\301\1\0\1\301\57\0\1\277\76\0\3\u0154"+
"\74\0\1\304\121\0\2\u0155\6\0\4\312\1\0\2\312"+
"\6\0\2\312\3\0\1\312\3\0\1\312\3\0\1\312"+
"\1\0\5\312\1\0\1\312\7\0\1\312\1\0\2\312"+
"\1\0\2\312\1\0\2\312\57\0\1\311\105\0\1\314"+
"\2\0\1\314\2\0\1\314\61\0\1\u0156\1\u0157\77\0"+
"\2\317\73\0\1\321\34\0\1\u0158\2\0\2\u0158\23\0"+
"\1\u0158\1\0\2\u0158\4\0\1\u0158\10\0\4\u0158\2\0"+
"\1\u0158\1\0\1\u0158\13\0\4\326\1\0\2\326\6\0"+
"\2\326\3\0\1\326\3\0\1\326\3\0\1\326\1\0"+
"\5\326\1\0\1\326\7\0\12\326\57\0\1\325\27\0"+
"\1\353\77\0\1\u0159\1\353\7\0\1\u015a\1\u015b\1\0"+
"\1\353\5\0\1\353\55\0\1\u015b\12\0\1\353\65\0"+
"\1\u015c\112\0\1\u015d\65\0\1\u015e\75\0\1\u015f\72\0"+
"\1\u015a\7\0\1\u0160\66\0\1\353\10\0\1\u0161\100\0"+
"\1\u0162\63\0\1\353\7\0\1\353\2\0\1\u0162\60\0"+
"\1\330\116\0\1\u0163\104\0\1\353\73\0\1\u0164\56\0"+
"\1\353\20\0\1\353\77\0\1\353\100\0\1\353\77\0"+
"\1\353\55\0\1\353\137\0\1\u0165\1\0\2\355\53\0"+
"\1\u0166\3\0\1\365\13\0\1\366\1\367\2\366\25\0"+
"\1\u0104\1\u0167\7\0\1\u0104\66\0\1\u0104\30\0\1\365"+
"\13\0\1\366\1\367\2\366\26\0\1\u0104\143\0\1\366"+
"\32\0\2\52\1\u0168\1\52\1\0\2\52\2\0\1\372"+
"\3\0\2\52\3\0\1\52\3\0\1\52\2\0\1\372"+
"\7\52\1\0\1\52\7\0\12\52\13\0\4\52\1\0"+
"\1\52\1\u0169\2\0\1\372\3\0\2\52\3\0\1\52"+
"\3\0\1\52\2\0\1\372\7\52\1\0\1\52\7\0"+
"\12\52\13\0\4\52\1\0\2\52\2\0\1\372\3\0"+
"\2\52\3\0\1\52\3\0\1\52\2\0\1\372\5\52"+
"\1\u016a\1\52\1\0\1\52\7\0\12\52\13\0\4\52"+
"\1\0\2\52\2\0\1\372\3\0\1\52\1\u016b\3\0"+
"\1\52\3\0\1\52\2\0\1\372\7\52\1\0\1\52"+
"\7\0\12\52\13\0\4\52\1\0\2\52\2\0\1\372"+
"\3\0\2\52\3\0\1\52\3\0\1\52\2\0\1\372"+
"\4\52\1\u016c\2\52\1\0\1\52\7\0\12\52\17\0"+
"\1\u016d\23\0\1\365\13\0\1\366\1\367\2\366\27\0"+
"\4\52\1\0\1\52\1\u016e\2\0\1\372\3\0\2\52"+
"\3\0\1\52\3\0\1\52\2\0\1\372\7\52\1\0"+
"\1\52\7\0\12\52\13\0\4\52\1\0\2\52\2\0"+
"\1\372\3\0\1\52\1\u016f\3\0\1\52\3\0\1\52"+
"\2\0\1\372\7\52\1\0\1\52\7\0\12\52\22\0"+
"\1\u0170\77\0\1\u0171\17\0\1\365\13\0\1\366\1\367"+
"\2\366\41\0\1\u0108\15\0\1\365\13\0\1\366\1\367"+
"\2\366\24\0\1\u0172\115\0\1\u0173\62\0\4\52\1\0"+
"\2\52\2\0\1\372\3\0\2\52\3\0\1\52\3\0"+
"\1\52\1\0\1\365\1\372\7\52\1\0\1\52\1\0"+
"\1\366\1\367\2\366\2\0\12\52\13\0\4\52\1\0"+
"\2\52\2\0\1\372\3\0\2\52\3\0\1\52\3\0"+
"\1\52\2\0\1\372\6\52\1\u0174\1\0\1\52\7\0"+
"\12\52\32\0\1\u0175\10\0\1\365\13\0\1\366\1\367"+
"\2\366\47\0\1\u0119\2\0\1\u0119\117\0\1\u010f\32\0"+
"\4\52\1\0\2\52\2\0\1\372\3\0\2\52\3\0"+
"\1\52\3\0\1\52\2\0\1\372\5\52\1\u0176\1\52"+
"\1\0\1\52\7\0\12\52\37\0\1\u0177\3\0\1\365"+
"\13\0\1\366\1\367\2\366\27\0\4\52\1\0\2\52"+
"\2\0\1\372\3\0\2\52\3\0\1\52\3\0\1\52"+
"\2\0\1\372\4\52\1\u0178\2\52\1\0\1\52\7\0"+
"\12\52\13\0\4\52\1\0\2\52\2\0\1\372\3\0"+
"\1\52\1\u0179\3\0\1\52\3\0\1\52\2\0\1\372"+
"\7\52\1\0\1\52\7\0\12\52\6\0\1\u017a\1\0"+
"\1\u017a\2\0\13\u017a\1\0\3\u017a\2\0\2\u017a\2\0"+
"\3\u017a\1\0\10\u017a\1\0\6\u017a\1\0\14\u017a\1\0"+
"\4\u017a\74\0\1\u017b\77\0\1\u017b\4\0\1\143\1\u011f"+
"\7\0\1\143\66\0\1\143\103\0\1\143\101\0\1\143"+
"\77\0\1\143\100\0\1\143\100\0\1\143\101\0\1\143"+
"\55\0\1\u0139\10\0\1\u0139\66\0\1\u0139\77\0\2\206"+
"\1\u017c\1\206\1\0\2\206\2\0\1\u012f\3\0\2\206"+
"\3\0\1\206\3\0\1\206\2\0\1\u012f\7\206\1\0"+
"\1\206\7\0\12\206\13\0\4\206\1\0\1\206\1\u017d"+
"\2\0\1\u012f\3\0\2\206\3\0\1\206\3\0\1\206"+
"\2\0\1\u012f\7\206\1\0\1\206\7\0\12\206\13\0"+
"\4\206\1\0\2\206\2\0\1\u012f\3\0\2\206\3\0"+
"\1\206\3\0\1\206\2\0\1\u012f\5\206\1\u017e\1\206"+
"\1\0\1\206\7\0\12\206\13\0\4\206\1\0\2\206"+
"\2\0\1\u012f\3\0\1\206\1\u017f\3\0\1\206\3\0"+
"\1\206\2\0\1\u012f\7\206\1\0\1\206\7\0\12\206"+
"\13\0\4\206\1\0\2\206\2\0\1\u012f\3\0\2\206"+
"\3\0\1\206\3\0\1\206\2\0\1\u012f\4\206\1\u0180"+
"\2\206\1\0\1\206\7\0\12\206\17\0\1\u0181\72\0"+
"\4\206\1\0\1\206\1\u0182\2\0\1\u012f\3\0\2\206"+
"\3\0\1\206\3\0\1\206\2\0\1\u012f\7\206\1\0"+
"\1\206\7\0\12\206\13\0\4\206\1\0\2\206\2\0"+
"\1\u012f\3\0\1\206\1\u0183\3\0\1\206\3\0\1\206"+
"\2\0\1\u012f\7\206\1\0\1\206\7\0\12\206\22\0"+
"\1\u0184\77\0\1\u0185\100\0\1\u013c\100\0\1\u0186\62\0"+
"\4\206\1\0\2\206\2\0\1\u012f\3\0\2\206\3\0"+
"\1\206\3\0\1\206\2\0\1\u012f\6\206\1\u0187\1\0"+
"\1\206\7\0\12\206\32\0\1\u012f\57\0\4\206\1\0"+
"\2\206\2\0\1\u012f\3\0\2\206\3\0\1\206\3\0"+
"\1\206\2\0\1\u012f\5\206\1\u0188\1\206\1\0\1\206"+
"\7\0\12\206\13\0\4\206\1\0\2\206\2\0\1\u012f"+
"\3\0\2\206\3\0\1\206\3\0\1\206\2\0\1\u012f"+
"\4\206\1\u0189\2\206\1\0\1\206\7\0\12\206\13\0"+
"\4\206\1\0\2\206\2\0\1\u012f\3\0\1\206\1\u018a"+
"\3\0\1\206\3\0\1\206\2\0\1\u012f\7\206\1\0"+
"\1\206\7\0\12\206\102\0\1\u018b\77\0\1\u018b\10\0"+
"\1\u018c\2\0\2\u018c\23\0\1\u018c\1\0\2\u018c\4\0"+
"\1\u018c\10\0\4\u018c\2\0\1\u018c\1\0\1\u018c\57\0"+
"\1\u014a\121\0\2\u018d\52\0\1\u014e\121\0\2\u018e\75\0"+
"\2\u018f\75\0\2\u0190\75\0\2\u0191\52\0\1\u0156\34\0"+
"\1\276\2\0\2\276\23\0\1\276\1\0\2\276\4\0"+
"\1\276\10\0\4\276\2\0\1\276\1\0\1\276\11\0"+
"\1\353\1\u015b\7\0\1\353\66\0\1\353\101\0\1\354"+
"\112\0\1\353\64\0\1\353\100\0\1\353\77\0\1\353"+
"\77\0\1\353\100\0\1\353\100\0\1\353\101\0\1\353"+
"\123\0\1\u0165\3\355\73\0\3\u0192\27\0\1\u0193\77\0"+
"\3\52\1\u0194\1\0\2\52\2\0\1\372\3\0\2\52"+
"\3\0\1\52\3\0\1\52\2\0\1\372\7\52\1\0"+
"\1\52\7\0\12\52\13\0\2\52\1\u0195\1\52\1\0"+
"\2\52\2\0\1\372\3\0\2\52\3\0\1\52\3\0"+
"\1\52\2\0\1\372\7\52\1\0\1\52\7\0\12\52"+
"\13\0\2\52\1\u0196\1\52\1\0\2\52\2\0\1\372"+
"\3\0\2\52\3\0\1\52\3\0\1\52\2\0\1\372"+
"\7\52\1\0\1\52\7\0\12\52\37\0\1\u0197\3\0"+
"\1\365\13\0\1\366\1\367\2\366\27\0\2\52\1\u0198"+
"\1\52\1\0\2\52\2\0\1\372\3\0\2\52\3\0"+
"\1\52\3\0\1\52\2\0\1\372\7\52\1\0\1\52"+
"\7\0\12\52\13\0\4\52\1\0\2\52\2\0\1\372"+
"\3\0\2\52\3\0\1\52\3\0\1\52\2\0\1\372"+
"\3\52\1\u0199\3\52\1\0\1\52\7\0\12\52\13\0"+
"\4\52\1\0\2\52\2\0\1\372\3\0\2\52\3\0"+
"\1\52\3\0\1\52\2\0\1\372\5\52\1\u019a\1\52"+
"\1\0\1\52\7\0\12\52\13\0\4\52\1\0\2\52"+
"\2\0\1\372\3\0\2\52\3\0\1\52\3\0\1\52"+
"\2\0\1\372\3\52\1\u019b\3\52\1\0\1\52\7\0"+
"\12\52\13\0\3\206\1\u019c\1\0\2\206\2\0\1\u012f"+
"\3\0\2\206\3\0\1\206\3\0\1\206\2\0\1\u012f"+
"\7\206\1\0\1\206\7\0\12\206\13\0\2\206\1\u019d"+
"\1\206\1\0\2\206\2\0\1\u012f\3\0\2\206\3\0"+
"\1\206\3\0\1\206\2\0\1\u012f\7\206\1\0\1\206"+
"\7\0\12\206\13\0\2\206\1\u019e\1\206\1\0\2\206"+
"\2\0\1\u012f\3\0\2\206\3\0\1\206\3\0\1\206"+
"\2\0\1\u012f\7\206\1\0\1\206\7\0\12\206\13\0"+
"\2\206\1\u019f\1\206\1\0\2\206\2\0\1\u012f\3\0"+
"\2\206\3\0\1\206\3\0\1\206\2\0\1\u012f\7\206"+
"\1\0\1\206\7\0\12\206\13\0\4\206\1\0\2\206"+
"\2\0\1\u012f\3\0\2\206\3\0\1\206\3\0\1\206"+
"\2\0\1\u012f\3\206\1\u01a0\3\206\1\0\1\206\7\0"+
"\12\206\13\0\4\206\1\0\2\206\2\0\1\u012f\3\0"+
"\2\206\3\0\1\206\3\0\1\206\2\0\1\u012f\5\206"+
"\1\u01a1\1\206\1\0\1\206\7\0\12\206\13\0\4\206"+
"\1\0\2\206\2\0\1\u012f\3\0\2\206\3\0\1\206"+
"\3\0\1\206\2\0\1\u012f\3\206\1\u01a2\3\206\1\0"+
"\1\206\7\0\12\206\15\0\1\u01a3\2\0\2\u01a3\23\0"+
"\1\u01a3\1\0\2\u01a3\4\0\1\u01a3\10\0\4\u01a3\2\0"+
"\1\u01a3\1\0\1\u01a3\102\0\2\u01a4\32\0\1\u01a5\3\0"+
"\1\365\13\0\1\366\1\367\2\366\27\0\4\52\1\0"+
"\2\52\2\0\1\372\3\0\2\52\3\0\1\u01a6\3\0"+
"\1\52\2\0\1\372\7\52\1\0\1\52\7\0\12\52"+
"\57\0\3\u01a7\30\0\4\52\1\0\2\52\2\0\1\372"+
"\3\0\2\52\3\0\1\52\3\0\1\52\2\0\1\372"+
"\6\52\1\u01a8\1\0\1\52\7\0\12\52\13\0\2\52"+
"\1\u01a9\1\52\1\0\2\52\2\0\1\372\3\0\2\52"+
"\3\0\1\52\3\0\1\52\2\0\1\372\7\52\1\0"+
"\1\52\7\0\12\52\13\0\1\52\1\u01aa\2\52\1\0"+
"\2\52\2\0\1\372\3\0\2\52\3\0\1\52\3\0"+
"\1\52\2\0\1\372\7\52\1\0\1\52\7\0\12\52"+
"\13\0\4\206\1\0\2\206\2\0\1\u012f\3\0\2\206"+
"\3\0\1\u01ab\3\0\1\206\2\0\1\u012f\7\206\1\0"+
"\1\206\7\0\12\206\13\0\4\206\1\0\2\206\2\0"+
"\1\u012f\3\0\2\206\3\0\1\206\3\0\1\206\2\0"+
"\1\u012f\6\206\1\u01ac\1\0\1\206\7\0\12\206\13\0"+
"\2\206\1\u01ad\1\206\1\0\2\206\2\0\1\u012f\3\0"+
"\2\206\3\0\1\206\3\0\1\206\2\0\1\u012f\7\206"+
"\1\0\1\206\7\0\12\206\13\0\1\206\1\u01ae\2\206"+
"\1\0\2\206\2\0\1\u012f\3\0\2\206\3\0\1\206"+
"\3\0\1\206\2\0\1\u012f\7\206\1\0\1\206\7\0"+
"\12\206\15\0\1\u01af\2\0\2\u01af\23\0\1\u01af\1\0"+
"\2\u01af\4\0\1\u01af\10\0\4\u01af\2\0\1\u01af\1\0"+
"\1\u01af\57\0\3\u01b0\30\0\2\52\1\u01b1\1\52\1\0"+
"\2\52\2\0\1\372\3\0\2\52\3\0\1\52\3\0"+
"\1\52\2\0\1\372\7\52\1\0\1\52\7\0\12\52"+
"\13\0\2\206\1\u01b2\1\206\1\0\2\206\2\0\1\u012f"+
"\3\0\2\206\3\0\1\206\3\0\1\206\2\0\1\u012f"+
"\7\206\1\0\1\206\7\0\12\206\15\0\1\u01b3\2\0"+
"\2\u01b3\23\0\1\u01b3\1\0\2\u01b3\4\0\1\u01b3\10\0"+
"\4\u01b3\2\0\1\u01b3\1\0\1\u01b3\6\0";
private static int [] zzUnpackTrans() {
int [] result = new int[18522];
int offset = 0;
offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
return result;
}
private static int zzUnpackTrans(String packed, int offset, int [] result) {
int i = 0; /* index in packed string */
int j = offset; /* index in unpacked array */
int l = packed.length();
while (i < l) {
int count = packed.charAt(i++);
int value = packed.charAt(i++);
value--;
do result[j++] = value; while (--count > 0);
}
return j;
}
/* error codes */
private static final int ZZ_UNKNOWN_ERROR = 0;
private static final int ZZ_NO_MATCH = 1;
private static final int ZZ_PUSHBACK_2BIG = 2;
/* error messages for the codes above */
private static final String[] ZZ_ERROR_MSG = {
"Unknown internal scanner error",
"Error: could not match input",
"Error: pushback value was too large"
};
/**
* ZZ_ATTRIBUTE[aState] contains the attributes of state <code>aState</code>
*/
private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();
private static final String ZZ_ATTRIBUTE_PACKED_0 =
"\43\0\1\11\1\1\1\11\32\1\1\11\3\1\1\11"+
"\1\1\2\11\1\0\1\1\1\11\2\1\3\11\22\1"+
"\1\11\1\0\10\11\1\1\1\0\1\1\1\11\1\0"+
"\2\11\1\0\2\11\1\0\1\11\2\1\1\11\1\0"+
"\2\11\1\0\2\1\1\11\15\1\1\11\10\1\1\11"+
"\1\1\1\11\5\1\2\11\1\0\3\11\1\0\2\11"+
"\1\1\2\11\1\1\1\0\1\1\1\0\1\1\1\11"+
"\1\0\1\11\1\0\1\11\1\0\2\1\1\11\1\0"+
"\1\1\1\11\1\1\1\11\2\1\1\0\2\11\1\1"+
"\1\0\1\11\1\1\1\11\1\1\1\0\1\1\1\0"+
"\1\11\1\1\3\11\1\0\1\1\1\11\1\1\2\0"+
"\2\1\2\0\1\1\2\0\3\1\1\0\1\1\2\0"+
"\1\1\1\0\1\1\1\0\1\11\1\0\1\1\1\0"+
"\3\1\1\0\2\1\1\11\2\0\2\1\1\11\10\1"+
"\1\0\5\1\2\0\5\1\1\0\2\1\1\11\4\1"+
"\1\11\1\0\1\11\3\0\1\1\1\0\1\1\1\0"+
"\2\1\2\0\2\1\1\0\1\11\1\1\1\0\2\11"+
"\1\1\1\11\10\1\1\0\1\11\2\1\1\11\1\0"+
"\3\1\1\11\4\1\2\0\1\1\2\11\1\0\1\11"+
"\1\0\1\11\4\0\2\11\1\0\1\11\1\0\1\1"+
"\1\0\1\1\3\0\1\1\2\0\2\1\1\0\2\1"+
"\2\0\12\1\1\0\4\1\1\11\2\1\2\11\5\1"+
"\1\11\2\1\3\11\4\1\1\11\1\1\1\11\1\0"+
"\4\11\1\0\3\1\1\0\14\1\1\11\1\0\1\1"+
"\1\11\10\1\1\11\2\1\1\11";
private static int [] zzUnpackAttribute() {
int [] result = new int[435];
int offset = 0;
offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
return result;
}
private static int zzUnpackAttribute(String packed, int offset, int [] result) {
int i = 0; /* index in packed string */
int j = offset; /* index in unpacked array */
int l = packed.length();
while (i < l) {
int count = packed.charAt(i++);
int value = packed.charAt(i++);
do result[j++] = value; while (--count > 0);
}
return j;
}
/** the input device */
private java.io.Reader zzReader;
/** the current state of the DFA */
private int zzState;
/** the current lexical state */
private int zzLexicalState = YYINITIAL;
/** this buffer contains the current text to be matched and is
the source of the yytext() string */
private CharSequence zzBuffer = "";
/** the textposition at the last accepting state */
private int zzMarkedPos;
/** the current text position in the buffer */
private int zzCurrentPos;
/** startRead marks the beginning of the yytext() string in the buffer */
private int zzStartRead;
/** endRead marks the last character in the buffer, that has been read
from input */
private int zzEndRead;
/**
* zzAtBOL == true <=> the scanner is currently at the beginning of a line
*/
private boolean zzAtBOL = true;
/** zzAtEOF == true <=> the scanner is at the EOF */
private boolean zzAtEOF;
/** denotes if the user-EOF-code has already been executed */
private boolean zzEOFDone;
/** For the backwards DFA of general lookahead statements */
private boolean [] zzFin = new boolean [ZZ_BUFFERSIZE+1];
/* user code: */
private org.elixir_lang.lexer.Stack stack = new org.elixir_lang.lexer.Stack();
private void startQuote(CharSequence quotePromoterCharSequence) {
String quotePromoter = quotePromoterCharSequence.toString();
stack.push(quotePromoter, yystate());
if (Base.isHeredocPromoter(quotePromoter)) {
yybegin(GROUP_HEREDOC_START);
} else {
yybegin(GROUP);
}
}
private IElementType fragmentType() {
return stack.fragmentType();
}
private void handleInState(int nextLexicalState) {
yypushback(yylength());
yybegin(nextLexicalState);
}
private boolean isTerminator(CharSequence terminator) {
return stack.terminator().equals(terminator.toString());
}
private boolean isInterpolating() {
return stack.isInterpolating();
}
private boolean isInterpolatingSigil(CharSequence sigilName) {
if (sigilName.length() != 1) {
throw new IllegalArgumentException("sigil names can only be 1 character long");
}
return isInterpolatingSigil(sigilName.charAt(0));
}
private boolean isInterpolatingSigil(char sigilName) {
return (sigilName >= 'a' && sigilName <= 'z');
}
private boolean isSigil() {
return stack.isSigil();
}
private void nameSigil(CharSequence sigilName) {
stack.nameSigil(sigilName.charAt(0));
}
private org.elixir_lang.lexer.StackFrame pop() {
return stack.pop();
}
private org.elixir_lang.lexer.group.Quote promotedQuote(CharSequence promoterCharSequence) {
// CharSequences don't look up correctly, so convert to String, which do.
String promoter = promoterCharSequence.toString();
org.elixir_lang.lexer.group.Quote quote = org.elixir_lang.lexer.group.Quote.fetch(promoter);
return quote;
}
private IElementType promoterType() {
return stack.promoterType();
}
private void setPromoter(CharSequence promoter) {
stack.setPromoter(promoter.toString());
}
private IElementType sigilNameType() {
return stack.sigilNameType();
}
// public for testing
public void pushAndBegin(int lexicalState) {
stack.push(yystate());
yybegin(lexicalState);
}
private IElementType terminatorType() {
return stack.terminatorType();
}
/**
* Creates a new scanner
*
* @param in the java.io.Reader to read input from.
*/
public ElixirFlexLexer(java.io.Reader in) {
this.zzReader = in;
}
/**
* Unpacks the compressed character translation table.
*
* @param packed the packed character translation table
* @return the unpacked character translation table
*/
private static char [] zzUnpackCMap(String packed) {
int size = 0;
for (int i = 0, length = packed.length(); i < length; i += 2) {
size += packed.charAt(i);
}
char[] map = new char[size];
int i = 0; /* index in packed string */
int j = 0; /* index in unpacked array */
while (i < packed.length()) {
int count = packed.charAt(i++);
char value = packed.charAt(i++);
do map[j++] = value; while (--count > 0);
}
return map;
}
public final int getTokenStart() {
return zzStartRead;
}
public final int getTokenEnd() {
return getTokenStart() + yylength();
}
public void reset(CharSequence buffer, int start, int end, int initialState) {
zzBuffer = buffer;
zzCurrentPos = zzMarkedPos = zzStartRead = start;
zzAtEOF = false;
zzAtBOL = true;
zzEndRead = end;
yybegin(initialState);
}
/**
* Refills the input buffer.
*
* @return <code>false</code>, iff there was new input.
*
* @exception java.io.IOException if any I/O-Error occurs
*/
private boolean zzRefill() throws java.io.IOException {
return true;
}
/**
* Returns the current lexical state.
*/
public final int yystate() {
return zzLexicalState;
}
/**
* Enters a new lexical state
*
* @param newState the new lexical state
*/
public final void yybegin(int newState) {
zzLexicalState = newState;
}
/**
* Returns the text matched by the current regular expression.
*/
public final CharSequence yytext() {
return zzBuffer.subSequence(zzStartRead, zzMarkedPos);
}
/**
* Returns the character at position <tt>pos</tt> from the
* matched text.
*
* It is equivalent to yytext().charAt(pos), but faster
*
* @param pos the position of the character to fetch.
* A value from 0 to yylength()-1.
*
* @return the character at position pos
*/
public final char yycharat(int pos) {
return zzBuffer.charAt(zzStartRead+pos);
}
/**
* Returns the length of the matched text region.
*/
public final int yylength() {
return zzMarkedPos-zzStartRead;
}
/**
* Reports an error that occured while scanning.
*
* In a wellformed scanner (no or only correct usage of
* yypushback(int) and a match-all fallback rule) this method
* will only be called with things that "Can't Possibly Happen".
* If this method is called, something is seriously wrong
* (e.g. a JFlex bug producing a faulty scanner etc.).
*
* Usual syntax/scanner level error handling should be done
* in error fallback rules.
*
* @param errorCode the code of the errormessage to display
*/
private void zzScanError(int errorCode) {
String message;
try {
message = ZZ_ERROR_MSG[errorCode];
}
catch (ArrayIndexOutOfBoundsException e) {
message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR];
}
throw new Error(message);
}
/**
* Pushes the specified amount of characters back into the input stream.
*
* They will be read again by then next call of the scanning method
*
* @param number the number of characters to be read again.
* This number must not be greater than yylength()!
*/
public void yypushback(int number) {
if ( number > yylength() )
zzScanError(ZZ_PUSHBACK_2BIG);
zzMarkedPos -= number;
}
/**
* Contains user EOF-code, which will be executed exactly once,
* when the end of file is reached
*/
private void zzDoEOF() {
if (!zzEOFDone) {
zzEOFDone = true;
}
}
/**
* Resumes scanning until the next regular expression is matched,
* the end of input is encountered or an I/O-Error occurs.
*
* @return the next token
* @exception java.io.IOException if any I/O-Error occurs
*/
public IElementType advance() throws java.io.IOException {
int zzInput;
int zzAction;
// cached fields:
int zzCurrentPosL;
int zzMarkedPosL;
int zzEndReadL = zzEndRead;
CharSequence zzBufferL = zzBuffer;
int [] zzTransL = ZZ_TRANS;
int [] zzRowMapL = ZZ_ROWMAP;
int [] zzAttrL = ZZ_ATTRIBUTE;
while (true) {
zzMarkedPosL = zzMarkedPos;
zzAction = -1;
zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;
zzState = ZZ_LEXSTATE[zzLexicalState];
// set up zzAction for empty match case:
int zzAttributes = zzAttrL[zzState];
if ( (zzAttributes & 1) == 1 ) {
zzAction = zzState;
}
zzForAction: {
while (true) {
if (zzCurrentPosL < zzEndReadL) {
zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL/*, zzEndReadL*/);
zzCurrentPosL += Character.charCount(zzInput);
}
else if (zzAtEOF) {
zzInput = YYEOF;
break zzForAction;
}
else {
// store back cached positions
zzCurrentPos = zzCurrentPosL;
zzMarkedPos = zzMarkedPosL;
boolean eof = zzRefill();
// get translated positions and possibly new buffer
zzCurrentPosL = zzCurrentPos;
zzMarkedPosL = zzMarkedPos;
zzBufferL = zzBuffer;
zzEndReadL = zzEndRead;
if (eof) {
zzInput = YYEOF;
break zzForAction;
}
else {
zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL/*, zzEndReadL*/);
zzCurrentPosL += Character.charCount(zzInput);
}
}
int zzNext = zzTransL[ zzRowMapL[zzState] + ZZ_CMAP(zzInput) ];
if (zzNext == -1) break zzForAction;
zzState = zzNext;
zzAttributes = zzAttrL[zzState];
if ( (zzAttributes & 1) == 1 ) {
zzAction = zzState;
zzMarkedPosL = zzCurrentPosL;
if ( (zzAttributes & 8) == 8 ) break zzForAction;
}
}
}
// store back cached position
zzMarkedPos = zzMarkedPosL;
if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
zzAtEOF = true;
zzDoEOF();
return null;
}
else {
switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
case 1:
{ return TokenType.BAD_CHARACTER;
}
case 163: break;
case 2:
{ // use stack to match up nested OPENING_CURLY and CLOSING_CURLY
pushAndBegin(YYINITIAL);
return ElixirTypes.OPENING_CURLY;
}
case 164: break;
case 3:
{ // protect from too many "}"
if (!stack.empty()) {
org.elixir_lang.lexer.StackFrame stackFrame = pop();
yybegin(stackFrame.getLastLexicalState());
}
return ElixirTypes.CLOSING_CURLY;
}
case 165: break;
case 4:
{ pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.RELATIONAL_OPERATOR;
}
case 166: break;
case 5:
{ pushAndBegin(CALL_OR_KEYWORD_PAIR_MAYBE);
return ElixirTypes.IDENTIFIER_TOKEN;
}
case 167: break;
case 6:
{ pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.CAPTURE_OPERATOR;
}
case 168: break;
case 7:
{ pushAndBegin(SIGIL);
return ElixirTypes.TILDE;
}
case 169: break;
case 8:
{ pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.PIPE_OPERATOR;
}
case 170: break;
case 9:
{ pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.UNARY_OPERATOR;
}
case 171: break;
case 10:
{ pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.MATCH_OPERATOR;
}
case 172: break;
case 11:
{ pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.STRUCT_OPERATOR;
}
case 173: break;
case 12:
{ pushAndBegin(DOT_OPERATION);
return ElixirTypes.DOT_OPERATOR;
}
case 174: break;
case 13:
{ pushAndBegin(DUAL_OPERATION);
return ElixirTypes.DUAL_OPERATOR;
}
case 175: break;
case 14:
{ pushAndBegin(ATOM_START);
return ElixirTypes.COLON;
}
case 176: break;
case 15:
{ pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.AT_OPERATOR;
}
case 177: break;
case 16:
{ pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.MULTIPLICATION_OPERATOR;
}
case 178: break;
case 17:
{ pushAndBegin(CHAR_TOKENIZATION);
return ElixirTypes.CHAR_TOKENIZER;
}
case 179: break;
case 18:
{ pushAndBegin(DECIMAL_WHOLE_NUMBER);
return ElixirTypes.VALID_DECIMAL_DIGITS;
}
case 180: break;
case 19:
{ return ElixirTypes.COMMA;
}
case 181: break;
case 20:
{ pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.ALIAS_TOKEN;
}
case 182: break;
case 21:
{ return ElixirTypes.SEMICOLON;
}
case 183: break;
case 22:
{ return ElixirTypes.EOL;
}
case 184: break;
case 23:
{ return TokenType.WHITE_SPACE;
}
case 185: break;
case 24:
{ return ElixirTypes.OPENING_PARENTHESIS;
}
case 186: break;
case 25:
{ return ElixirTypes.COMMENT;
}
case 187: break;
case 26:
{ return ElixirTypes.CLOSING_BRACKET;
}
case 188: break;
case 27:
{ return ElixirTypes.OPENING_BRACKET;
}
case 189: break;
case 28:
{ return ElixirTypes.CLOSING_PARENTHESIS;
}
case 190: break;
case 29:
{ /* return to KEYWORD_PAIR_MAYBE so that COLON after quote can be parsed
as KEYWORD_PAIR_COLON to differentiate between valid `<quote><colon>`
and invalid `<quote><space><colon>`. */
pushAndBegin(KEYWORD_PAIR_MAYBE);
startQuote(yytext());
return promoterType();
}
case 191: break;
case 30:
{ org.elixir_lang.lexer.StackFrame stackFrame = pop();
yybegin(stackFrame.getLastLexicalState());
return ElixirTypes.ATOM_FRAGMENT;
}
case 192: break;
case 31:
{ /* At the end of the quote, return the state (YYINITIAL or INTERPOLATION) before ATOM_START as
anything after the closing quote should be handle by the state prior to ATOM_START. Without
this, EOL and WHITESPACE won't be handled correctly */
org.elixir_lang.lexer.StackFrame stackFrame = pop();
yybegin(stackFrame.getLastLexicalState());
startQuote(yytext());
return promoterType();
}
case 193: break;
case 32:
{ yybegin(UNKNOWN_BASE_WHOLE_NUMBER);
return ElixirTypes.UNKNOWN_WHOLE_NUMBER_BASE;
}
case 194: break;
case 33:
{ yybegin(OCTAL_WHOLE_NUMBER);
return ElixirTypes.OCTAL_WHOLE_NUMBER_BASE;
}
case 195: break;
case 34:
{ yybegin(BINARY_WHOLE_NUMBER);
return ElixirTypes.BINARY_WHOLE_NUMBER_BASE;
}
case 196: break;
case 35:
{ yybegin(BINARY_WHOLE_NUMBER);
return ElixirTypes.OBSOLETE_BINARY_WHOLE_NUMBER_BASE;
}
case 197: break;
case 36:
{ yybegin(HEXADECIMAL_WHOLE_NUMBER);
return ElixirTypes.HEXADECIMAL_WHOLE_NUMBER_BASE;
}
case 198: break;
case 37:
{ yybegin(HEXADECIMAL_WHOLE_NUMBER);
return ElixirTypes.OBSOLETE_HEXADECIMAL_WHOLE_NUMBER_BASE;
}
case 199: break;
case 38:
{ org.elixir_lang.lexer.StackFrame stackFrame = pop();
handleInState(stackFrame.getLastLexicalState());
}
case 200: break;
case 39:
{ return ElixirTypes.INVALID_BINARY_DIGITS;
}
case 201: break;
case 40:
{ return ElixirTypes.VALID_BINARY_DIGITS;
}
case 202: break;
case 41:
{ org.elixir_lang.lexer.StackFrame stackFrame = pop();
handleInState(stackFrame.getLastLexicalState());
}
case 203: break;
case 42:
{ org.elixir_lang.lexer.StackFrame stackFrame = pop();
handleInState(stackFrame.getLastLexicalState());
// zero-width token
return ElixirTypes.CALL;
}
case 204: break;
case 43:
{ handleInState(KEYWORD_PAIR_MAYBE);
}
case 205: break;
case 44:
{ org.elixir_lang.lexer.StackFrame stackFrame = pop();
yybegin(stackFrame.getLastLexicalState());
return ElixirTypes.CHAR_LIST_FRAGMENT;
}
case 206: break;
case 45:
{ yybegin(ESCAPE_SEQUENCE);
return ElixirTypes.ESCAPE;
}
case 207: break;
case 46:
{ org.elixir_lang.lexer.StackFrame stackFrame = pop();
handleInState(stackFrame.getLastLexicalState());
}
case 208: break;
case 47:
{ return ElixirTypes.INVALID_DECIMAL_DIGITS;
}
case 209: break;
case 48:
{ return ElixirTypes.VALID_DECIMAL_DIGITS;
}
case 210: break;
case 49:
{ return ElixirTypes.DECIMAL_SEPARATOR;
}
case 211: break;
case 50:
{ handleInState(DECIMAL_EXPONENT);
}
case 212: break;
case 51:
{ yybegin(DECIMAL_EXPONENT);
return ElixirTypes.DUAL_OPERATOR;
}
case 213: break;
case 52:
{ yybegin(DECIMAL_EXPONENT_SIGN);
return ElixirTypes.EXPONENT_MARK;
}
case 214: break;
case 53:
{ org.elixir_lang.lexer.StackFrame stackFrame = pop();
handleInState(stackFrame.getLastLexicalState());
}
case 215: break;
case 54:
{ yybegin(CALL_MAYBE);
return ElixirTypes.RELATIONAL_OPERATOR;
}
case 216: break;
case 55:
{ yybegin(CALL_OR_KEYWORD_PAIR_MAYBE);
return ElixirTypes.IDENTIFIER_TOKEN;
}
case 217: break;
case 56:
{ yybegin(CALL_MAYBE);
return ElixirTypes.CAPTURE_OPERATOR;
}
case 218: break;
case 57:
{ yybegin(CALL_MAYBE);
return ElixirTypes.PIPE_OPERATOR;
}
case 219: break;
case 58:
{ yybegin(CALL_MAYBE);
return ElixirTypes.UNARY_OPERATOR;
}
case 220: break;
case 59:
{ yybegin(CALL_MAYBE);
return ElixirTypes.MATCH_OPERATOR;
}
case 221: break;
case 60:
{ yybegin(CALL_MAYBE);
return ElixirTypes.STRUCT_OPERATOR;
}
case 222: break;
case 61:
{ yybegin(CALL_MAYBE);
return ElixirTypes.DUAL_OPERATOR;
}
case 223: break;
case 62:
{ yybegin(CALL_MAYBE);
return ElixirTypes.AT_OPERATOR;
}
case 224: break;
case 63:
{ yybegin(CALL_MAYBE);
return ElixirTypes.MULTIPLICATION_OPERATOR;
}
case 225: break;
case 64:
{ /* return to CALL_MAYBE so that OPENING_BRACKET or
OPENING_PARENTHESES after quote can be parsed
with CALL so parser doesn't think call is no parentheses with
parenthetical or list argument. */
yybegin(CALL_MAYBE);
startQuote(yytext());
return promoterType();
}
case 226: break;
case 65:
{ org.elixir_lang.lexer.StackFrame stackFrame = pop();
yybegin(stackFrame.getLastLexicalState());
return ElixirTypes.SIGNIFICANT_WHITE_SPACE;
}
case 227: break;
case 66:
{ yybegin(GROUP);
return fragmentType();
}
case 228: break;
case 67:
{ yybegin(GROUP);
return ElixirTypes.EOL;
}
case 229: break;
case 68:
{ org.elixir_lang.lexer.StackFrame stackFrame = pop();
yybegin(stackFrame.getLastLexicalState());
return ElixirTypes.ESCAPED_CHARACTER_TOKEN;
}
case 230: break;
case 69:
{ yybegin(UNICODE_ESCAPE_SEQUENCE);
return ElixirTypes.UNICODE_ESCAPE_CHARACTER;
}
case 231: break;
case 70:
{ org.elixir_lang.lexer.StackFrame stackFrame = pop();
yybegin(stackFrame.getLastLexicalState());
return ElixirTypes.EOL;
}
case 232: break;
case 71:
{ yybegin(HEXADECIMAL_ESCAPE_SEQUENCE);
return ElixirTypes.HEXADECIMAL_WHOLE_NUMBER_BASE;
}
case 233: break;
case 72:
{ org.elixir_lang.lexer.StackFrame stackFrame = pop();
yybegin(stackFrame.getLastLexicalState());
return ElixirTypes.CLOSING_CURLY;
}
case 234: break;
case 73:
{ return ElixirTypes.VALID_HEXADECIMAL_DIGITS;
}
case 235: break;
case 74:
{ return fragmentType();
}
case 236: break;
case 75:
{ if (isTerminator(yytext())) {
if (isSigil()) {
yybegin(SIGIL_MODIFIERS);
return terminatorType();
} else {
org.elixir_lang.lexer.StackFrame stackFrame = pop();
yybegin(stackFrame.getLastLexicalState());
return stackFrame.terminatorType();
}
} else {
return fragmentType();
}
}
case 237: break;
case 76:
{ if (isInterpolating()) {
pushAndBegin(ESCAPE_SEQUENCE);
return ElixirTypes.ESCAPE;
} else {
yybegin(ESCAPE_IN_LITERAL_GROUP);
return fragmentType();
}
}
case 238: break;
case 77:
{ if (isInterpolating()) {
pushAndBegin(ESCAPE_SEQUENCE);
return ElixirTypes.ESCAPE;
} else {
return fragmentType();
}
}
case 239: break;
case 78:
{ yybegin(GROUP_HEREDOC_LINE_START);
return ElixirTypes.EOL;
}
case 240: break;
case 79:
{ /* The EOL after the escape is also needed to end the Heredoc line. It functions as both, so arbitarily I'm
choosing the escaped version to be a zero-width token. */
yypushback(yylength());
yybegin(GROUP_HEREDOC_LINE_BODY);
return ElixirTypes.EOL;
}
case 241: break;
case 80:
{ handleInState(GROUP_HEREDOC_LINE_BODY);
}
case 242: break;
case 81:
{ yybegin(GROUP_HEREDOC_LINE_BODY);
return ElixirTypes.HEREDOC_LINE_WHITE_SPACE_TOKEN;
}
case 243: break;
case 82:
{ yybegin(GROUP_HEREDOC_LINE_START);
return ElixirTypes.EOL;
}
case 244: break;
case 83:
{ yybegin(EXTENDED_HEXADECIMAL_ESCAPE_SEQUENCE);
return ElixirTypes.OPENING_CURLY;
}
case 245: break;
case 84:
{ org.elixir_lang.lexer.StackFrame stackFrame = pop();
yybegin(stackFrame.getLastLexicalState());
return ElixirTypes.VALID_HEXADECIMAL_DIGITS;
}
case 246: break;
case 85:
{ org.elixir_lang.lexer.StackFrame stackFrame = pop();
handleInState(stackFrame.getLastLexicalState());
}
case 247: break;
case 86:
{ return ElixirTypes.INVALID_HEXADECIMAL_DIGITS;
}
case 248: break;
case 87:
{ org.elixir_lang.lexer.StackFrame stackFrame = pop();
yybegin(stackFrame.getLastLexicalState());
return ElixirTypes.INTERPOLATION_END;
}
case 249: break;
case 88:
{ org.elixir_lang.lexer.StackFrame stackFrame = pop();
handleInState(stackFrame.getLastLexicalState());
}
case 250: break;
case 89:
{ setPromoter(yytext());
yybegin(GROUP);
return promoterType();
}
case 251: break;
case 90:
{ org.elixir_lang.lexer.StackFrame stackFrame = pop();
handleInState(stackFrame.getLastLexicalState());
}
case 252: break;
case 91:
{ return ElixirTypes.INVALID_OCTAL_DIGITS;
}
case 253: break;
case 92:
{ return ElixirTypes.VALID_OCTAL_DIGITS;
}
case 254: break;
case 93:
{ org.elixir_lang.lexer.StackFrame stackFrame = pop();
yybegin(stackFrame.getLastLexicalState());
return ElixirTypes.MULTIPLICATION_OPERATOR;
}
case 255: break;
case 94:
{ nameSigil(yytext());
yybegin(NAMED_SIGIL);
return sigilNameType();
}
case 256: break;
case 95:
{ org.elixir_lang.lexer.StackFrame stackFrame = pop();
handleInState(stackFrame.getLastLexicalState());
}
case 257: break;
case 96:
{ return ElixirTypes.SIGIL_MODIFIER;
}
case 258: break;
case 97:
{ org.elixir_lang.lexer.StackFrame stackFrame = pop();
handleInState(stackFrame.getLastLexicalState());
}
case 259: break;
case 98:
{ return ElixirTypes.INVALID_UNKNOWN_BASE_DIGITS;
}
case 260: break;
case 99:
{ return ElixirTypes.OPENING_BIT;
}
case 261: break;
case 100:
{ pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.TWO_OPERATOR;
}
case 262: break;
case 101:
{ pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.ARROW_OPERATOR;
}
case 263: break;
case 102:
{ pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.IN_MATCH_OPERATOR;
}
case 264: break;
case 103:
// general lookahead, find correct zzMarkedPos
{ int zzFState = 33;
int zzFPos = zzStartRead;
if (zzFin.length <= zzBufferL.length()) { zzFin = new boolean[zzBufferL.length()+1]; }
boolean zzFinL[] = zzFin;
while (zzFState != -1 && zzFPos < zzMarkedPos) {
zzFinL[zzFPos] = ((zzAttrL[zzFState] & 1) == 1);
zzInput = Character.codePointAt(zzBufferL, zzFPos/*, zzMarkedPos*/);
zzFPos += Character.charCount(zzInput);
zzFState = zzTransL[ zzRowMapL[zzFState] + ZZ_CMAP(zzInput) ];
}
if (zzFState != -1) { zzFinL[zzFPos++] = ((zzAttrL[zzFState] & 1) == 1); }
while (zzFPos <= zzMarkedPos) {
zzFinL[zzFPos++] = false;
}
zzFState = 34;
zzFPos = zzMarkedPos;
while (!zzFinL[zzFPos] || (zzAttrL[zzFState] & 1) != 1) {
zzInput = Character.codePointBefore(zzBufferL, zzFPos/*, zzStartRead*/);
zzFPos -= Character.charCount(zzInput);
zzFState = zzTransL[ zzRowMapL[zzFState] + ZZ_CMAP(zzInput) ];
};
zzMarkedPos = zzFPos;
}
{ pushAndBegin(REFERENCE_OPERATION);
return ElixirTypes.IDENTIFIER_TOKEN;
}
case 265: break;
case 104:
{ return ElixirTypes.CLOSING_BIT;
}
case 266: break;
case 105:
{ pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.AND_OPERATOR;
}
case 267: break;
case 106:
{ pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.DO;
}
case 268: break;
case 107:
{ pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.OR_OPERATOR;
}
case 269: break;
case 108:
{ pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.COMPARISON_OPERATOR;
}
case 270: break;
case 109:
{ pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.ASSOCIATION_OPERATOR;
}
case 271: break;
case 110:
{ pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.STAB_OPERATOR;
}
case 272: break;
case 111:
{ return ElixirTypes.TYPE_OPERATOR;
}
case 273: break;
case 112:
// lookahead expression with fixed base length
zzMarkedPos = Character.offsetByCodePoints
(zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1);
{ return ElixirTypes.COLON;
}
case 274: break;
case 113:
{ pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.IN_OPERATOR;
}
case 275: break;
case 114:
{ pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.FN;
}
case 276: break;
case 115:
// lookahead expression with fixed base length
zzMarkedPos = Character.offsetByCodePoints
(zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1);
{ pushAndBegin(BASE_WHOLE_NUMBER_BASE);
return ElixirTypes.BASE_WHOLE_NUMBER_PREFIX;
}
case 277: break;
case 116:
// lookahead expression with fixed base length
zzMarkedPos = Character.offsetByCodePoints
(zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1);
{ yybegin(DECIMAL_FRACTION);
return ElixirTypes.DECIMAL_MARK;
}
case 278: break;
case 117:
{ yybegin(CALL_MAYBE);
return ElixirTypes.TWO_OPERATOR;
}
case 279: break;
case 118:
{ yybegin(CALL_MAYBE);
return ElixirTypes.ARROW_OPERATOR;
}
case 280: break;
case 119:
{ yybegin(CALL_MAYBE);
return ElixirTypes.IN_MATCH_OPERATOR;
}
case 281: break;
case 120:
{ yybegin(CALL_MAYBE);
return ElixirTypes.AND_OPERATOR;
}
case 282: break;
case 121:
{ yybegin(CALL_MAYBE);
return ElixirTypes.DO;
}
case 283: break;
case 122:
{ yybegin(CALL_MAYBE);
return ElixirTypes.OR_OPERATOR;
}
case 284: break;
case 123:
{ yybegin(CALL_MAYBE);
return ElixirTypes.COMPARISON_OPERATOR;
}
case 285: break;
case 124:
{ yybegin(CALL_MAYBE);
return ElixirTypes.STAB_OPERATOR;
}
case 286: break;
case 125:
{ yybegin(CALL_MAYBE);
return ElixirTypes.IN_OPERATOR;
}
case 287: break;
case 126:
{ CharSequence groupTerminator = yytext().subSequence(1, yytext().length());
// manual lookahread pushes terminator back
yypushback(groupTerminator.length());
/* even literal groups have escape sequences because escaping the terminator is still
allowed */
if (isTerminator(groupTerminator) || isInterpolating()) {
// matches interpolating behavior from `{ESCAPE}` rule below
pushAndBegin(ESCAPE_SEQUENCE);
return ElixirTypes.ESCAPE;
} else {
// matches non-interpolating behavior from `{ESCAPE}` rule below
yybegin(ESCAPE_IN_LITERAL_GROUP);
return fragmentType();
}
}
case 288: break;
case 127:
// lookahead expression with fixed base length
zzMarkedPos = Character.offsetByCodePoints
(zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1);
{ if (isInterpolating()) {
pushAndBegin(ESCAPE_SEQUENCE);
} else {
yybegin(ESCAPE_IN_LITERAL_GROUP);
}
return ElixirTypes.ESCAPE;
}
case 289: break;
case 128:
{ if (isInterpolating()) {
pushAndBegin(INTERPOLATION);
return ElixirTypes.INTERPOLATION_START;
} else {
return fragmentType();
}
}
case 290: break;
case 129:
// lookahead expression with fixed base length
zzMarkedPos = Character.offsetByCodePoints
(zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1);
{ if (isInterpolating()) {
pushAndBegin(ESCAPE_SEQUENCE);
return ElixirTypes.ESCAPE;
} else {
yybegin(GROUP_HEREDOC_LINE_ESCAPED_EOL);
return ElixirTypes.ESCAPE;
}
}
case 291: break;
case 130:
// lookahead expression with fixed base length
zzMarkedPos = Character.offsetByCodePoints
(zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1);
{ org.elixir_lang.lexer.StackFrame stackFrame = pop();
yybegin(stackFrame.getLastLexicalState());
return ElixirTypes.KEYWORD_PAIR_COLON;
}
case 292: break;
case 131:
{ pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.END;
}
case 293: break;
case 132:
{ pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.NIL;
}
case 294: break;
case 133:
{ pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.THREE_OPERATOR;
}
case 295: break;
case 134:
// lookahead expression with fixed base length
zzMarkedPos = Character.offsetByCodePoints
(zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1);
{ pushAndBegin(ATOM_START);
return ElixirTypes.COLON;
}
case 296: break;
case 135:
// lookahead expression with fixed lookahead length
zzMarkedPos = Character.offsetByCodePoints
(zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzMarkedPos, -2);
{ return ElixirTypes.SIGNIFICANT_WHITE_SPACE;
}
case 297: break;
case 136:
{ startQuote(yytext());
return promoterType();
}
case 298: break;
case 137:
{ yybegin(CALL_MAYBE);
return ElixirTypes.END;
}
case 299: break;
case 138:
{ yybegin(CALL_MAYBE);
return ElixirTypes.NIL;
}
case 300: break;
case 139:
{ yybegin(CALL_MAYBE);
return ElixirTypes.THREE_OPERATOR;
}
case 301: break;
case 140:
{ /* Does NOT return to CALL_MAYBE because heredocs aren't valid
relative identifiers. This clauses is only here to prevent a
prefix match on {QUOTE_PROMOTER}. */
org.elixir_lang.lexer.StackFrame stackFrame = pop();
handleInState(stackFrame.getLastLexicalState());
}
case 302: break;
case 141:
{ if (isTerminator(yytext())) {
if (isSigil()) {
yybegin(SIGIL_MODIFIERS);
return terminatorType();
} else {
org.elixir_lang.lexer.StackFrame stackFrame = pop();
yybegin(stackFrame.getLastLexicalState());
return stackFrame.terminatorType();
}
} else {
handleInState(GROUP_HEREDOC_LINE_BODY);
}
}
case 303: break;
case 142:
{ handleInState(GROUP_HEREDOC_END);
}
case 304: break;
case 143:
{ // Similar to GROUP_HEREDOC_END's GROUP_HEREDOC_TERMINATOR rule, but...
if (isTerminator(yytext())) {
if (isSigil()) {
yybegin(SIGIL_MODIFIERS);
return terminatorType();
} else {
org.elixir_lang.lexer.StackFrame stackFrame = pop();
yybegin(stackFrame.getLastLexicalState());
return stackFrame.terminatorType();
}
} else {
/* ...returns BAD_CHARACTER instead of going to GROUP_HEREDOC_LINE_BODY when the wrong
type of terminator */
return TokenType.BAD_CHARACTER;
}
}
case 305: break;
case 144:
{ setPromoter(yytext());
yybegin(GROUP_HEREDOC_START);
return promoterType();
}
case 306: break;
case 145:
// lookahead expression with fixed base length
zzMarkedPos = Character.offsetByCodePoints
(zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 2);
{ // Definitely a Keyword pair, but KEYWORD_PAIR_MAYBE state will still work.
pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.TUPLE_OPERATOR;
}
case 307: break;
case 146:
{ pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.WHEN_OPERATOR;
}
case 308: break;
case 147:
{ pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.ELSE;
}
case 309: break;
case 148:
{ pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.TRUE;
}
case 310: break;
case 149:
{ yybegin(CALL_MAYBE);
return ElixirTypes.WHEN_OPERATOR;
}
case 311: break;
case 150:
{ yybegin(CALL_MAYBE);
return ElixirTypes.ELSE;
}
case 312: break;
case 151:
{ yybegin(CALL_MAYBE);
return ElixirTypes.TRUE;
}
case 313: break;
case 152:
{ String groupHeredocTerminator = yytext().toString().trim();
// manual lookahead pushes terminator back
yypushback(3);
if (isTerminator(groupHeredocTerminator)) {
yybegin(GROUP_HEREDOC_END);
return ElixirTypes.HEREDOC_PREFIX_WHITE_SPACE;
} else {
yybegin(GROUP_HEREDOC_LINE_BODY);
return ElixirTypes.HEREDOC_LINE_WHITE_SPACE_TOKEN;
}
}
case 314: break;
case 153:
{ pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.AFTER;
}
case 315: break;
case 154:
// lookahead expression with fixed base length
zzMarkedPos = Character.offsetByCodePoints
(zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 3);
{ // Definitely a Keyword pair, but KEYWORD_PAIR_MAYBE state will still work.
pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.MAP_OPERATOR;
}
case 316: break;
case 155:
{ pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.FALSE;
}
case 317: break;
case 156:
{ pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.CATCH;
}
case 318: break;
case 157:
{ yybegin(CALL_MAYBE);
return ElixirTypes.AFTER;
}
case 319: break;
case 158:
{ yybegin(CALL_MAYBE);
return ElixirTypes.FALSE;
}
case 320: break;
case 159:
{ yybegin(CALL_MAYBE);
return ElixirTypes.CATCH;
}
case 321: break;
case 160:
// lookahead expression with fixed base length
zzMarkedPos = Character.offsetByCodePoints
(zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 4);
{ // Definitely a Keyword pair, but KEYWORD_PAIR_MAYBE state will still work.
pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.BIT_STRING_OPERATOR;
}
case 322: break;
case 161:
{ pushAndBegin(KEYWORD_PAIR_MAYBE);
return ElixirTypes.RESCUE;
}
case 323: break;
case 162:
{ yybegin(CALL_MAYBE);
return ElixirTypes.RESCUE;
}
case 324: break;
default:
zzScanError(ZZ_NO_MATCH);
}
}
}
}
}