regexp: character class lexing reworked to improve (?x) comment mode

This commit is contained in:
Bas Leijdekkers
2017-01-09 17:10:10 +01:00
parent 9c0658d9fc
commit b3d2d5c9a9
12 changed files with 460 additions and 418 deletions
@@ -7,7 +7,7 @@ import com.intellij.lexer.FlexLexer;
import com.intellij.psi.StringEscapesTokenTypes;
import com.intellij.psi.tree.IElementType;
import java.util.ArrayList;
import com.intellij.util.containers.IntArrayList;
import java.util.EnumSet;
@SuppressWarnings("ALL")
@@ -30,10 +30,10 @@ class _RegExLexer implements FlexLexer {
public static final int QUOTED = 2;
public static final int EMBRACED = 4;
public static final int QUANTIFIER = 6;
public static final int CLASS1 = 8;
public static final int NEGATE_CLASS1 = 10;
public static final int CLASS2 = 12;
public static final int NEGATE_CLASS2 = 14;
public static final int NEGATED_CLASS = 8;
public static final int QUOTED_CLASS1 = 10;
public static final int CLASS1 = 12;
public static final int CLASS2 = 14;
public static final int PROP = 16;
public static final int NAMED = 18;
public static final int OPTIONS = 20;
@@ -60,7 +60,7 @@ class _RegExLexer implements FlexLexer {
/**
* Translates characters to character classes
* Chosen bits are [11, 6, 4]
* Total runtime size is 13792 bytes
* Total runtime size is 13728 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)];
@@ -76,112 +76,111 @@ class _RegExLexer implements FlexLexer {
/* The ZZ_CMAP_Y table has 2752 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\10\1\1\20\1\21\1\13\1\22\4\13\1\23\10\13\1\24\12\13\1\25"+
"\1\13\1\26\1\25\1\13\1\27\4\1\1\13\1\30\1\31\2\1\2\13\1\30\1\1\1\32\1\25\5"+
"\13\1\33\1\34\1\35\1\1\1\36\1\13\1\1\1\37\5\13\1\40\1\41\1\42\1\13\1\30\1"+
"\43\1\13\1\44\1\45\1\1\1\13\1\46\4\1\1\13\1\47\4\1\1\50\2\13\1\51\1\1\1\52"+
"\1\53\1\25\1\54\1\55\1\56\1\57\1\60\1\61\1\53\1\16\1\62\1\55\1\56\1\63\1\1"+
"\1\64\1\65\1\66\1\67\1\22\1\56\1\70\1\1\1\71\1\53\1\72\1\73\1\55\1\56\1\70"+
"\1\1\1\61\1\53\1\41\1\74\1\75\1\76\1\77\1\1\1\71\1\65\1\1\1\100\1\36\1\56"+
"\1\51\1\1\1\101\1\53\1\1\1\100\1\36\1\56\1\102\1\1\1\60\1\53\1\103\1\100\1"+
"\36\1\13\1\104\1\60\1\105\1\53\1\106\1\107\1\110\1\13\1\111\1\112\1\1\1\65"+
"\1\1\1\25\2\13\1\113\1\112\1\114\2\1\1\115\1\116\1\117\1\120\1\121\1\122\2"+
"\1\1\71\1\1\1\114\1\1\1\123\1\13\1\124\1\1\1\125\7\1\2\13\1\30\1\105\1\114"+
"\1\126\1\127\1\130\1\131\1\114\2\13\1\132\2\13\1\133\24\13\1\134\1\135\2\13"+
"\1\134\2\13\1\136\1\137\1\14\3\13\1\137\3\13\1\30\2\1\1\13\1\1\5\13\1\140"+
"\1\25\45\13\1\141\1\13\1\25\1\30\4\13\1\30\1\142\1\143\1\16\1\13\1\16\1\13"+
"\1\16\1\143\1\71\3\13\1\144\1\1\1\145\1\114\2\1\1\114\5\13\1\27\2\13\1\146"+
"\4\13\1\40\1\13\1\147\2\1\1\65\1\13\1\150\1\47\2\13\1\151\1\13\1\77\1\114"+
"\2\1\1\13\1\112\3\13\1\47\2\1\2\114\1\152\5\1\1\107\2\13\1\144\1\153\1\114"+
"\2\1\1\154\1\13\1\155\1\42\2\13\1\40\1\1\2\13\1\144\1\1\1\156\1\42\1\13\1"+
"\150\6\1\1\157\1\160\14\13\4\1\21\13\1\140\2\13\1\140\1\161\1\13\1\150\3\13"+
"\1\162\1\163\1\164\1\124\1\163\2\1\1\165\4\1\1\166\1\1\1\124\6\1\1\167\1\170"+
"\1\171\1\172\1\173\3\1\1\174\147\1\2\13\1\147\2\13\1\147\10\13\1\175\1\176"+
"\2\13\1\132\3\13\1\177\1\1\1\13\1\112\4\200\4\1\1\105\35\1\1\201\2\1\1\202"+
"\1\25\4\13\1\203\1\25\4\13\1\133\1\107\1\13\1\150\1\25\4\13\1\147\1\1\1\13"+
"\1\30\3\1\1\13\40\1\133\13\1\40\4\1\135\13\1\40\2\1\10\13\1\124\4\1\2\13\1"+
"\150\20\13\1\124\1\13\1\204\1\1\2\13\1\147\1\105\1\13\1\150\4\13\1\40\2\1"+
"\1\205\1\206\5\13\1\207\1\13\1\150\1\27\3\1\1\205\1\210\1\13\1\31\1\1\3\13"+
"\1\144\1\206\2\13\1\144\1\1\1\114\1\1\1\211\1\42\1\13\1\40\1\13\1\112\1\1"+
"\1\13\1\124\1\50\2\13\1\31\1\105\1\114\1\212\1\213\2\13\1\46\1\1\1\214\1\114"+
"\1\13\1\215\3\13\1\216\1\217\1\220\1\30\1\66\1\221\1\222\1\200\2\13\1\133"+
"\1\40\7\13\1\31\1\114\72\13\1\144\1\13\1\223\2\13\1\151\20\1\26\13\1\150\6"+
"\13\1\77\2\1\1\112\1\224\1\56\1\225\1\226\6\13\1\16\1\1\1\154\25\13\1\150"+
"\1\1\4\13\1\206\2\13\1\27\2\1\1\151\7\1\1\212\7\13\1\124\1\1\1\114\1\25\1"+
"\30\1\25\1\30\1\227\4\13\1\147\1\230\1\231\2\1\1\232\1\13\1\14\1\233\2\150"+
"\2\1\7\13\1\30\30\1\1\13\1\124\3\13\1\71\2\1\2\13\1\1\1\13\1\234\2\13\1\40"+
"\1\13\1\150\2\13\1\235\3\1\11\13\1\150\1\114\5\1\2\13\1\27\3\13\1\144\11\1"+
"\23\13\1\112\1\13\1\40\1\27\11\1\1\236\2\13\1\237\1\13\1\40\1\13\1\112\1\13"+
"\1\147\4\1\1\13\1\240\1\13\1\40\1\13\1\77\4\1\3\13\1\241\4\1\1\71\1\242\1"+
"\13\1\144\2\1\1\13\1\124\1\13\1\124\2\1\1\123\1\13\1\47\1\1\3\13\1\40\1\13"+
"\1\40\1\13\1\31\1\13\1\16\6\1\4\13\1\46\3\1\3\13\1\31\3\13\1\31\60\1\1\154"+
"\2\13\1\27\2\1\1\65\1\1\1\154\2\13\2\1\1\13\1\46\1\114\1\154\1\13\1\112\1"+
"\65\1\1\2\13\1\243\1\154\2\13\1\31\1\244\1\245\2\1\1\13\1\22\1\151\5\1\1\246"+
"\1\247\1\46\2\13\1\147\1\1\1\114\1\73\1\55\1\56\1\70\1\1\1\250\1\16\21\1\3"+
"\13\1\1\1\251\1\114\12\1\2\13\1\147\2\1\1\252\2\1\3\13\1\1\1\253\1\114\2\1"+
"\2\13\1\30\1\1\1\114\3\1\1\13\1\77\1\1\1\114\26\1\4\13\1\114\1\105\34\1\3"+
"\13\1\46\20\1\71\13\1\77\16\1\14\13\1\144\53\1\2\13\1\147\75\1\44\13\1\112"+
"\33\1\43\13\1\46\1\13\1\147\1\114\6\1\1\13\1\150\1\1\3\13\1\1\1\144\1\114"+
"\1\154\1\254\1\13\67\1\4\13\1\47\1\71\3\1\1\154\6\1\1\16\77\1\6\13\1\30\1"+
"\124\1\46\1\77\66\1\5\13\1\212\3\13\1\143\1\255\1\256\1\257\3\13\1\260\1\261"+
"\1\13\1\262\1\263\1\36\24\13\1\264\1\13\1\36\1\133\1\13\1\133\1\13\1\212\1"+
"\13\1\212\1\147\1\13\1\147\1\13\1\56\1\13\1\56\1\13\1\265\3\266\14\13\1\47"+
"\123\1\1\257\1\13\1\267\1\270\1\271\1\272\1\273\1\274\1\275\1\151\1\276\1"+
"\151\24\1\55\13\1\112\2\1\103\13\1\47\15\13\1\150\150\13\1\16\25\1\41\13\1"+
"\150\36\1");
"\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\2\1\1\10\1\11\1\12\1\13\1\12\1\13\34\12\1"+
"\14\1\15\1\16\10\1\1\17\1\20\1\12\1\21\4\12\1\22\10\12\1\23\12\12\1\24\1\12"+
"\1\25\1\24\1\12\1\26\4\1\1\12\1\27\1\30\2\1\2\12\1\27\1\1\1\31\1\24\5\12\1"+
"\32\1\33\1\34\1\1\1\35\1\12\1\1\1\36\5\12\1\37\1\40\1\41\1\12\1\27\1\42\1"+
"\12\1\43\1\44\1\1\1\12\1\45\4\1\1\12\1\46\4\1\1\47\2\12\1\50\1\1\1\51\1\52"+
"\1\24\1\53\1\54\1\55\1\56\1\57\1\60\1\52\1\15\1\61\1\54\1\55\1\62\1\1\1\63"+
"\1\64\1\65\1\66\1\21\1\55\1\67\1\1\1\70\1\52\1\71\1\72\1\54\1\55\1\67\1\1"+
"\1\60\1\52\1\40\1\73\1\74\1\75\1\76\1\1\1\70\1\64\1\1\1\77\1\35\1\55\1\50"+
"\1\1\1\100\1\52\1\1\1\77\1\35\1\55\1\101\1\1\1\57\1\52\1\102\1\77\1\35\1\12"+
"\1\103\1\57\1\104\1\52\1\105\1\106\1\107\1\12\1\110\1\111\1\1\1\64\1\1\1\24"+
"\2\12\1\112\1\111\1\113\2\1\1\114\1\115\1\116\1\117\1\120\1\121\2\1\1\70\1"+
"\1\1\113\1\1\1\122\1\12\1\123\1\1\1\124\7\1\2\12\1\27\1\104\1\113\1\125\1"+
"\126\1\127\1\130\1\113\2\12\1\131\2\12\1\132\24\12\1\133\1\134\2\12\1\133"+
"\2\12\1\135\1\136\1\13\3\12\1\136\3\12\1\27\2\1\1\12\1\1\5\12\1\137\1\24\45"+
"\12\1\140\1\12\1\24\1\27\4\12\1\27\1\141\1\142\1\15\1\12\1\15\1\12\1\15\1"+
"\142\1\70\3\12\1\143\1\1\1\144\1\113\2\1\1\113\5\12\1\26\2\12\1\145\4\12\1"+
"\37\1\12\1\146\2\1\1\64\1\12\1\147\1\46\2\12\1\150\1\12\1\76\1\113\2\1\1\12"+
"\1\111\3\12\1\46\2\1\2\113\1\151\5\1\1\106\2\12\1\143\1\152\1\113\2\1\1\153"+
"\1\12\1\154\1\41\2\12\1\37\1\1\2\12\1\143\1\1\1\155\1\41\1\12\1\147\6\1\1"+
"\156\1\157\14\12\4\1\21\12\1\137\2\12\1\137\1\160\1\12\1\147\3\12\1\161\1"+
"\162\1\163\1\123\1\162\7\1\1\164\1\1\1\123\6\1\1\165\1\166\1\167\1\170\1\171"+
"\3\1\1\172\147\1\2\12\1\146\2\12\1\146\10\12\1\173\1\174\2\12\1\131\3\12\1"+
"\175\1\1\1\12\1\111\4\176\4\1\1\104\35\1\1\177\2\1\1\200\1\24\4\12\1\201\1"+
"\24\4\12\1\132\1\106\1\12\1\147\1\24\4\12\1\146\1\1\1\12\1\27\3\1\1\12\40"+
"\1\133\12\1\37\4\1\135\12\1\37\2\1\10\12\1\123\4\1\2\12\1\147\20\12\1\123"+
"\1\12\1\202\1\1\2\12\1\146\1\104\1\12\1\147\4\12\1\37\2\1\1\203\1\204\5\12"+
"\1\205\1\12\1\147\1\26\3\1\1\203\1\206\1\12\1\30\1\1\3\12\1\143\1\204\2\12"+
"\1\143\1\1\1\113\1\1\1\207\1\41\1\12\1\37\1\12\1\111\1\1\1\12\1\123\1\47\2"+
"\12\1\30\1\104\1\113\1\210\1\211\2\12\1\45\1\1\1\212\1\113\1\12\1\213\3\12"+
"\1\214\1\215\1\216\1\27\1\65\1\217\1\220\1\176\2\12\1\132\1\37\7\12\1\30\1"+
"\113\72\12\1\143\1\12\1\221\2\12\1\150\20\1\26\12\1\147\6\12\1\76\2\1\1\111"+
"\1\222\1\55\1\223\1\224\6\12\1\15\1\1\1\153\25\12\1\147\1\1\4\12\1\204\2\12"+
"\1\26\2\1\1\150\7\1\1\210\7\12\1\123\1\1\1\113\1\24\1\27\1\24\1\27\1\225\4"+
"\12\1\146\1\226\1\227\2\1\1\230\1\12\1\13\1\231\2\147\2\1\7\12\1\27\30\1\1"+
"\12\1\123\3\12\1\70\2\1\2\12\1\1\1\12\1\232\2\12\1\37\1\12\1\147\2\12\1\233"+
"\3\1\11\12\1\147\1\113\5\1\2\12\1\26\3\12\1\143\11\1\23\12\1\111\1\12\1\37"+
"\1\26\11\1\1\234\2\12\1\235\1\12\1\37\1\12\1\111\1\12\1\146\4\1\1\12\1\236"+
"\1\12\1\37\1\12\1\76\4\1\3\12\1\237\4\1\1\70\1\240\1\12\1\143\2\1\1\12\1\123"+
"\1\12\1\123\2\1\1\122\1\12\1\46\1\1\3\12\1\37\1\12\1\37\1\12\1\30\1\12\1\15"+
"\6\1\4\12\1\45\3\1\3\12\1\30\3\12\1\30\60\1\1\153\2\12\1\26\2\1\1\64\1\1\1"+
"\153\2\12\2\1\1\12\1\45\1\113\1\153\1\12\1\111\1\64\1\1\2\12\1\241\1\153\2"+
"\12\1\30\1\242\1\243\2\1\1\12\1\21\1\150\5\1\1\244\1\245\1\45\2\12\1\146\1"+
"\1\1\113\1\72\1\54\1\55\1\67\1\1\1\246\1\15\21\1\3\12\1\1\1\247\1\113\12\1"+
"\2\12\1\146\2\1\1\250\2\1\3\12\1\1\1\251\1\113\2\1\2\12\1\27\1\1\1\113\3\1"+
"\1\12\1\76\1\1\1\113\26\1\4\12\1\113\1\104\34\1\3\12\1\45\20\1\71\12\1\76"+
"\16\1\14\12\1\143\53\1\2\12\1\146\75\1\44\12\1\111\33\1\43\12\1\45\1\12\1"+
"\146\1\113\6\1\1\12\1\147\1\1\3\12\1\1\1\143\1\113\1\153\1\252\1\12\67\1\4"+
"\12\1\46\1\70\3\1\1\153\6\1\1\15\77\1\6\12\1\27\1\123\1\45\1\76\66\1\5\12"+
"\1\210\3\12\1\142\1\253\1\254\1\255\3\12\1\256\1\257\1\12\1\260\1\261\1\35"+
"\24\12\1\262\1\12\1\35\1\132\1\12\1\132\1\12\1\210\1\12\1\210\1\146\1\12\1"+
"\146\1\12\1\55\1\12\1\55\1\12\1\263\3\264\14\12\1\46\123\1\1\255\1\12\1\265"+
"\1\266\1\267\1\270\1\271\1\272\1\273\1\150\1\274\1\150\24\1\55\12\1\111\2"+
"\1\103\12\1\46\15\12\1\147\150\12\1\15\25\1\41\12\1\147\36\1");
/* The ZZ_CMAP_A table has 3056 entries */
/* The ZZ_CMAP_A table has 3024 entries */
static final char ZZ_CMAP_A[] = zzUnpackCMap(
"\10\0\2\60\1\70\1\71\1\72\1\70\22\0\1\14\1\77\1\0\1\100\1\17\1\0\1\74\1\63"+
"\1\2\1\3\1\21\1\22\1\67\1\13\1\1\1\0\1\53\3\55\4\54\2\47\1\73\1\0\1\62\1\76"+
"\1\75\1\20\1\0\2\30\1\37\1\35\1\45\1\46\1\31\1\56\1\40\2\65\1\44\1\66\1\57"+
"\10\0\2\60\1\76\1\0\1\60\1\76\22\0\1\14\1\74\1\0\1\75\1\17\1\0\1\71\1\63\1"+
"\2\1\3\1\21\1\22\1\67\1\13\1\1\1\0\1\53\3\55\4\54\2\47\1\70\1\0\1\62\1\73"+
"\1\72\1\20\1\0\2\30\1\37\1\35\1\45\1\46\1\31\1\56\1\40\2\65\1\44\1\66\1\57"+
"\1\65\1\42\1\50\1\64\1\34\1\65\1\43\3\33\1\65\1\32\1\6\1\10\1\7\1\16\1\12"+
"\1\0\1\25\1\26\1\36\1\35\2\25\1\27\1\56\1\40\1\65\1\61\1\43\1\65\1\24\1\65"+
"\1\41\1\65\1\24\1\33\1\24\1\52\2\33\1\51\1\65\1\31\1\4\1\23\1\5\7\0\1\71\24"+
"\0\1\11\12\0\1\11\4\0\1\11\5\0\27\11\1\0\12\11\4\0\14\11\16\0\5\11\7\0\1\11"+
"\1\0\1\11\1\0\5\11\1\0\2\11\2\0\4\11\1\0\1\11\6\0\1\11\1\0\3\11\1\0\1\11\1"+
"\0\4\11\1\0\23\11\1\0\13\11\10\0\6\11\1\0\26\11\2\0\1\11\6\0\10\11\10\0\13"+
"\11\5\0\3\11\15\0\12\15\4\0\6\11\1\0\1\11\17\0\2\11\7\0\2\11\12\15\3\11\2"+
"\0\2\11\1\0\16\11\15\0\11\11\13\0\1\11\16\0\12\15\6\11\4\0\2\11\4\0\1\11\5"+
"\0\6\11\4\0\1\11\11\0\1\11\3\0\1\11\7\0\11\11\7\0\5\11\17\0\26\11\3\0\1\11"+
"\2\0\1\11\7\0\12\11\4\0\12\15\1\11\4\0\10\11\2\0\2\11\2\0\26\11\1\0\7\11\1"+
"\0\1\11\3\0\4\11\3\0\1\11\20\0\1\11\15\0\2\11\1\0\1\11\5\0\6\11\4\0\2\11\1"+
"\0\2\11\1\0\2\11\1\0\2\11\17\0\4\11\1\0\1\11\7\0\12\15\2\0\3\11\20\0\11\11"+
"\1\0\2\11\1\0\2\11\1\0\5\11\3\0\1\11\2\0\1\11\30\0\1\11\13\0\10\11\2\0\1\11"+
"\3\0\1\11\1\0\6\11\3\0\3\11\1\0\4\11\3\0\2\11\1\0\1\11\1\0\2\11\3\0\2\11\3"+
"\0\3\11\3\0\14\11\13\0\10\11\1\0\2\11\10\0\3\11\5\0\4\11\1\0\5\11\3\0\1\11"+
"\3\0\2\11\15\0\13\11\2\0\1\11\21\0\1\11\12\0\6\11\5\0\22\11\3\0\10\11\1\0"+
"\11\11\1\0\1\11\2\0\7\11\11\0\1\11\1\0\2\11\14\0\12\15\7\0\2\11\1\0\1\11\2"+
"\0\2\11\1\0\1\11\2\0\1\11\6\0\4\11\1\0\7\11\1\0\3\11\1\0\1\11\1\0\1\11\2\0"+
"\2\11\1\0\4\11\1\0\2\11\11\0\1\11\2\0\5\11\1\0\1\11\11\0\12\15\2\0\14\11\1"+
"\0\24\11\13\0\5\11\3\0\6\11\4\0\4\11\3\0\1\11\3\0\2\11\7\0\3\11\4\0\15\11"+
"\14\0\1\11\1\0\6\11\1\0\1\11\5\0\1\11\2\0\13\11\1\0\15\11\1\0\4\11\2\0\7\11"+
"\1\0\1\11\1\0\4\11\2\0\1\11\1\0\4\11\2\0\7\11\1\0\1\11\1\0\4\11\2\0\16\11"+
"\2\0\6\11\2\0\15\11\2\0\1\11\1\0\10\11\7\0\15\11\1\0\6\11\23\0\1\11\4\0\1"+
"\11\3\0\11\11\1\0\1\11\5\0\17\11\1\0\16\11\2\0\14\11\13\0\1\11\15\0\7\11\7"+
"\0\16\11\15\0\2\11\12\15\3\0\3\11\11\0\4\11\1\0\4\11\3\0\2\11\11\0\10\11\1"+
"\0\1\11\1\0\1\11\1\0\1\11\1\0\6\11\1\0\7\11\1\0\1\11\3\0\3\11\1\0\7\11\3\0"+
"\4\11\2\0\6\11\14\0\2\71\7\0\1\11\15\0\1\11\2\0\1\11\4\0\1\11\2\0\12\11\1"+
"\0\1\11\3\0\5\11\6\0\1\11\1\0\1\11\1\0\1\11\1\0\4\11\1\0\13\11\2\0\4\11\5"+
"\0\5\11\4\0\1\11\4\0\2\11\13\0\5\11\6\0\4\11\3\0\2\11\14\0\10\11\7\0\10\11"+
"\1\0\7\11\6\0\2\11\12\0\5\11\5\0\2\11\3\0\7\11\6\0\3\11\12\15\2\11\13\0\11"+
"\11\2\0\27\11\2\0\7\11\1\0\3\11\1\0\4\11\1\0\4\11\2\0\6\11\3\0\1\11\1\0\1"+
"\11\2\0\5\11\1\0\12\11\12\15\5\11\1\0\3\11\1\0\10\11\4\0\7\11\3\0\1\11\3\0"+
"\2\11\1\0\1\11\3\0\2\11\2\0\5\11\2\0\1\11\1\0\1\11\30\0\3\11\3\0\6\11\2\0"+
"\6\11\2\0\6\11\11\0\7\11\4\0\5\11\3\0\5\11\5\0\1\11\1\0\10\11\1\0\5\11\1\0"+
"\1\11\1\0\2\11\1\0\2\11\1\0\12\11\6\0\12\11\2\0\6\11\2\0\6\11\2\0\6\11\2\0"+
"\3\11\3\0\14\11\1\0\16\11\1\0\2\11\1\0\2\11\1\0\10\11\6\0\4\11\4\0\16\11\2"+
"\0\1\11\1\0\14\11\1\0\2\11\3\0\1\11\2\0\4\11\1\0\2\11\12\0\10\11\6\0\6\11"+
"\1\0\3\11\1\0\12\11\3\0\1\11\12\0\4\11\13\0\12\15\1\11\1\0\1\11\3\0\7\11\1"+
"\0\1\11\1\0\4\11\1\0\17\11\1\0\2\11\14\0\3\11\4\0\2\11\1\0\1\11\20\0\4\11"+
"\10\0\1\11\13\0\10\11\5\0\3\11\2\0\1\11\2\0\2\11\2\0\4\11\1\0\14\11\1\0\1"+
"\11\1\0\7\11\1\0\21\11\1\0\4\11\2\0\10\11\1\0\7\11\1\0\14\11\1\0\4\11\1\0"+
"\5\11\1\0\1\11\3\0\14\11\2\0\13\11\1\0\10\11\2\0\22\15\1\0\2\11\1\0\1\11\2"+
"\0\1\11\1\0\12\11\1\0\4\11\1\0\1\11\1\0\1\11\6\0\1\11\4\0\1\11\1\0\1\11\1"+
"\0\1\11\1\0\3\11\1\0\2\11\1\0\1\11\2\0\1\11\1\0\1\11\1\0\1\11\1\0\1\11\1\0"+
"\1\11\1\0\2\11\1\0\1\11\2\0\4\11\1\0\7\11\1\0\4\11\1\0\4\11\1\0\1\11\1\0\12"+
"\11\1\0\5\11\1\0\3\11\1\0\5\11\1\0\5\11");
"\1\41\1\65\1\24\1\33\1\24\1\52\2\33\1\51\1\65\1\31\1\4\1\23\1\5\14\0\1\11"+
"\12\0\1\11\4\0\1\11\5\0\27\11\1\0\12\11\4\0\14\11\16\0\5\11\7\0\1\11\1\0\1"+
"\11\1\0\5\11\1\0\2\11\2\0\4\11\1\0\1\11\6\0\1\11\1\0\3\11\1\0\1\11\1\0\4\11"+
"\1\0\23\11\1\0\13\11\10\0\6\11\1\0\26\11\2\0\1\11\6\0\10\11\10\0\13\11\5\0"+
"\3\11\15\0\12\15\4\0\6\11\1\0\1\11\17\0\2\11\7\0\2\11\12\15\3\11\2\0\2\11"+
"\1\0\16\11\15\0\11\11\13\0\1\11\16\0\12\15\6\11\4\0\2\11\4\0\1\11\5\0\6\11"+
"\4\0\1\11\11\0\1\11\3\0\1\11\7\0\11\11\7\0\5\11\17\0\26\11\3\0\1\11\2\0\1"+
"\11\7\0\12\11\4\0\12\15\1\11\4\0\10\11\2\0\2\11\2\0\26\11\1\0\7\11\1\0\1\11"+
"\3\0\4\11\3\0\1\11\20\0\1\11\15\0\2\11\1\0\1\11\5\0\6\11\4\0\2\11\1\0\2\11"+
"\1\0\2\11\1\0\2\11\17\0\4\11\1\0\1\11\7\0\12\15\2\0\3\11\20\0\11\11\1\0\2"+
"\11\1\0\2\11\1\0\5\11\3\0\1\11\2\0\1\11\30\0\1\11\13\0\10\11\2\0\1\11\3\0"+
"\1\11\1\0\6\11\3\0\3\11\1\0\4\11\3\0\2\11\1\0\1\11\1\0\2\11\3\0\2\11\3\0\3"+
"\11\3\0\14\11\13\0\10\11\1\0\2\11\10\0\3\11\5\0\4\11\1\0\5\11\3\0\1\11\3\0"+
"\2\11\15\0\13\11\2\0\1\11\21\0\1\11\12\0\6\11\5\0\22\11\3\0\10\11\1\0\11\11"+
"\1\0\1\11\2\0\7\11\11\0\1\11\1\0\2\11\14\0\12\15\7\0\2\11\1\0\1\11\2\0\2\11"+
"\1\0\1\11\2\0\1\11\6\0\4\11\1\0\7\11\1\0\3\11\1\0\1\11\1\0\1\11\2\0\2\11\1"+
"\0\4\11\1\0\2\11\11\0\1\11\2\0\5\11\1\0\1\11\11\0\12\15\2\0\14\11\1\0\24\11"+
"\13\0\5\11\3\0\6\11\4\0\4\11\3\0\1\11\3\0\2\11\7\0\3\11\4\0\15\11\14\0\1\11"+
"\1\0\6\11\1\0\1\11\5\0\1\11\2\0\13\11\1\0\15\11\1\0\4\11\2\0\7\11\1\0\1\11"+
"\1\0\4\11\2\0\1\11\1\0\4\11\2\0\7\11\1\0\1\11\1\0\4\11\2\0\16\11\2\0\6\11"+
"\2\0\15\11\2\0\1\11\1\0\10\11\7\0\15\11\1\0\6\11\23\0\1\11\4\0\1\11\3\0\11"+
"\11\1\0\1\11\5\0\17\11\1\0\16\11\2\0\14\11\13\0\1\11\15\0\7\11\7\0\16\11\15"+
"\0\2\11\12\15\3\0\3\11\11\0\4\11\1\0\4\11\3\0\2\11\11\0\10\11\1\0\1\11\1\0"+
"\1\11\1\0\1\11\1\0\6\11\1\0\7\11\1\0\1\11\3\0\3\11\1\0\7\11\3\0\4\11\2\0\6"+
"\11\5\0\1\11\15\0\1\11\2\0\1\11\4\0\1\11\2\0\12\11\1\0\1\11\3\0\5\11\6\0\1"+
"\11\1\0\1\11\1\0\1\11\1\0\4\11\1\0\13\11\2\0\4\11\5\0\5\11\4\0\1\11\4\0\2"+
"\11\13\0\5\11\6\0\4\11\3\0\2\11\14\0\10\11\7\0\10\11\1\0\7\11\6\0\2\11\12"+
"\0\5\11\5\0\2\11\3\0\7\11\6\0\3\11\12\15\2\11\13\0\11\11\2\0\27\11\2\0\7\11"+
"\1\0\3\11\1\0\4\11\1\0\4\11\2\0\6\11\3\0\1\11\1\0\1\11\2\0\5\11\1\0\12\11"+
"\12\15\5\11\1\0\3\11\1\0\10\11\4\0\7\11\3\0\1\11\3\0\2\11\1\0\1\11\3\0\2\11"+
"\2\0\5\11\2\0\1\11\1\0\1\11\30\0\3\11\3\0\6\11\2\0\6\11\2\0\6\11\11\0\7\11"+
"\4\0\5\11\3\0\5\11\5\0\1\11\1\0\10\11\1\0\5\11\1\0\1\11\1\0\2\11\1\0\2\11"+
"\1\0\12\11\6\0\12\11\2\0\6\11\2\0\6\11\2\0\6\11\2\0\3\11\3\0\14\11\1\0\16"+
"\11\1\0\2\11\1\0\2\11\1\0\10\11\6\0\4\11\4\0\16\11\2\0\1\11\1\0\14\11\1\0"+
"\2\11\3\0\1\11\2\0\4\11\1\0\2\11\12\0\10\11\6\0\6\11\1\0\3\11\1\0\12\11\3"+
"\0\1\11\12\0\4\11\13\0\12\15\1\11\1\0\1\11\3\0\7\11\1\0\1\11\1\0\4\11\1\0"+
"\17\11\1\0\2\11\14\0\3\11\4\0\2\11\1\0\1\11\20\0\4\11\10\0\1\11\13\0\10\11"+
"\5\0\3\11\2\0\1\11\2\0\2\11\2\0\4\11\1\0\14\11\1\0\1\11\1\0\7\11\1\0\21\11"+
"\1\0\4\11\2\0\10\11\1\0\7\11\1\0\14\11\1\0\4\11\1\0\5\11\1\0\1\11\3\0\14\11"+
"\2\0\13\11\1\0\10\11\2\0\22\15\1\0\2\11\1\0\1\11\2\0\1\11\1\0\12\11\1\0\4"+
"\11\1\0\1\11\1\0\1\11\6\0\1\11\4\0\1\11\1\0\1\11\1\0\1\11\1\0\3\11\1\0\2\11"+
"\1\0\1\11\2\0\1\11\1\0\1\11\1\0\1\11\1\0\1\11\1\0\1\11\1\0\2\11\1\0\1\11\2"+
"\0\4\11\1\0\7\11\1\0\4\11\1\0\4\11\1\0\1\11\1\0\12\11\1\0\5\11\1\0\3\11\1"+
"\0\5\11\1\0\5\11");
/**
* Translates DFA states to action switch labels.
@@ -191,23 +190,23 @@ class _RegExLexer implements FlexLexer {
private static final String ZZ_ACTION_PACKED_0 =
"\13\0\1\1\6\0\1\2\1\3\1\4\1\5\1\6"+
"\1\7\1\10\1\11\1\12\1\13\1\14\1\15\1\16"+
"\1\17\1\20\1\21\1\22\1\23\1\2\1\24\1\25"+
"\1\26\1\27\1\30\1\31\1\32\1\31\1\33\1\34"+
"\1\35\1\12\1\36\1\37\1\2\1\12\1\40\1\41"+
"\1\24\1\42\1\43\1\44\1\45\1\46\1\47\1\1"+
"\1\26\1\50\1\51\2\52\1\53\1\54\2\0\1\55"+
"\1\0\1\56\1\57\1\60\1\61\1\62\1\63\1\64"+
"\1\65\1\66\1\67\1\12\1\67\1\70\2\71\1\72"+
"\1\73\1\12\1\74\1\75\1\76\1\77\1\100\1\101"+
"\1\102\1\12\1\103\1\104\1\105\1\0\1\106\1\107"+
"\1\110\2\53\1\111\1\0\1\112\1\113\1\114\1\115"+
"\1\116\1\0\1\117\1\0\1\120\2\0\1\121\1\122"+
"\1\123\1\74\1\124\1\125\1\126\1\127\2\130\1\131"+
"\1\132\1\133\1\134\1\135\1\136\1\137\1\140\2\0"+
"\1\74\1\141\1\127\2\130\1\142\1\127\1\143\1\144";
"\1\17\1\20\1\21\1\22\1\2\1\23\1\24\1\25"+
"\1\26\1\27\1\30\2\31\1\32\1\33\1\34\1\32"+
"\1\35\1\36\1\37\1\12\1\40\1\2\1\41\1\12"+
"\1\42\1\43\1\44\1\45\1\46\1\47\1\1\1\25"+
"\1\50\1\51\2\52\1\53\1\54\2\0\1\55\1\56"+
"\1\57\1\60\1\61\1\62\1\63\1\64\1\65\1\66"+
"\1\12\1\66\1\67\2\70\1\71\1\72\1\12\1\73"+
"\1\74\1\75\1\76\1\77\1\100\1\101\1\12\1\102"+
"\1\103\1\104\1\105\1\106\1\107\1\110\1\111\1\112"+
"\2\53\1\113\1\0\1\114\1\115\1\116\1\117\1\120"+
"\1\0\1\121\2\0\1\122\1\123\1\124\1\73\1\125"+
"\1\126\1\127\1\130\2\131\1\132\1\133\1\134\1\135"+
"\1\136\1\137\1\140\2\0\1\73\1\141\1\130\2\131"+
"\1\142\1\130\1\143\1\144";
private static int [] zzUnpackAction() {
int [] result = new int[151];
int [] result = new int[148];
int offset = 0;
offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
return result;
@@ -232,28 +231,28 @@ class _RegExLexer implements FlexLexer {
private static final int [] ZZ_ROWMAP = zzUnpackRowMap();
private static final String ZZ_ROWMAP_PACKED_0 =
"\0\0\0\101\0\202\0\303\0\u0104\0\u0145\0\u0186\0\u01c7"+
"\0\u0208\0\u0249\0\u028a\0\u02cb\0\u030c\0\u034d\0\u038e\0\u03cf"+
"\0\u0410\0\u0451\0\u0492\0\u0492\0\u04d3\0\u0492\0\u0514\0\u0492"+
"\0\u0555\0\u0492\0\u0596\0\u0492\0\u0492\0\u0492\0\u0492\0\u0492"+
"\0\u0492\0\u0492\0\u0492\0\u0492\0\u05d7\0\u0492\0\u0492\0\u0618"+
"\0\u0659\0\u0492\0\u0492\0\u0492\0\u069a\0\u0492\0\u06db\0\u0492"+
"\0\u071c\0\u0492\0\u0492\0\u075d\0\u079e\0\u0492\0\u0492\0\u0555"+
"\0\u0492\0\u0492\0\u0492\0\u07df\0\u0820\0\u0492\0\u0492\0\u0861"+
"\0\u0492\0\u0492\0\u0492\0\u08a2\0\u08e3\0\u0924\0\u0965\0\u09a6"+
"\0\u0492\0\u09e7\0\u0a28\0\u0492\0\u0492\0\u0492\0\u0492\0\u0492"+
"\0\u0492\0\u0492\0\u0492\0\u0a69\0\u0aaa\0\u0492\0\u0492\0\u0aeb"+
"\0\u0492\0\u0492\0\u0492\0\u0492\0\u0b2c\0\u0492\0\u0b6d\0\u0bae"+
"\0\u0bef\0\u0492\0\u0492\0\u0c30\0\u0492\0\u0492\0\u0492\0\u0c71"+
"\0\u0492\0\u0492\0\u0492\0\u0492\0\u0cb2\0\u0492\0\u0cf3\0\u0d34"+
"\0\u0492\0\u0492\0\u0492\0\u0492\0\u0d75\0\u0492\0\u0db6\0\u0492"+
"\0\u0df7\0\u0e38\0\u0492\0\u0492\0\u0492\0\u0e79\0\u0492\0\u0eba"+
"\0\u0492\0\u0efb\0\u0f3c\0\u0f7d\0\u0492\0\u0492\0\u0492\0\u0492"+
"\0\u0492\0\u0492\0\u0492\0\u0492\0\u0fbe\0\u0fff\0\u0492\0\u0492"+
"\0\u1040\0\u1081\0\u0492\0\u0492\0\u10c2\0\u0492\0\u0492";
"\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\u046e\0\u04ad\0\u046e\0\u04ec\0\u046e"+
"\0\u052b\0\u046e\0\u056a\0\u046e\0\u046e\0\u046e\0\u046e\0\u046e"+
"\0\u046e\0\u046e\0\u046e\0\u05a9\0\u046e\0\u046e\0\u05e8\0\u0627"+
"\0\u046e\0\u046e\0\u046e\0\u05a9\0\u046e\0\u0666\0\u046e\0\u06a5"+
"\0\u046e\0\u06e4\0\u046e\0\u0723\0\u046e\0\u0762\0\u046e\0\u07a1"+
"\0\u046e\0\u046e\0\u046e\0\u07e0\0\u081f\0\u046e\0\u046e\0\u085e"+
"\0\u046e\0\u046e\0\u046e\0\u089d\0\u08dc\0\u091b\0\u095a\0\u0999"+
"\0\u046e\0\u046e\0\u046e\0\u046e\0\u046e\0\u046e\0\u046e\0\u046e"+
"\0\u046e\0\u09d8\0\u0a17\0\u046e\0\u046e\0\u0a56\0\u046e\0\u046e"+
"\0\u046e\0\u046e\0\u0a95\0\u046e\0\u0ad4\0\u0b13\0\u0b52\0\u046e"+
"\0\u046e\0\u0b91\0\u046e\0\u046e\0\u046e\0\u046e\0\u046e\0\u046e"+
"\0\u046e\0\u046e\0\u046e\0\u046e\0\u0bd0\0\u046e\0\u0c0f\0\u0c4e"+
"\0\u046e\0\u046e\0\u046e\0\u046e\0\u0c8d\0\u046e\0\u0ccc\0\u0d0b"+
"\0\u046e\0\u046e\0\u046e\0\u0d4a\0\u046e\0\u0d89\0\u046e\0\u0dc8"+
"\0\u0e07\0\u0e46\0\u046e\0\u046e\0\u046e\0\u046e\0\u046e\0\u046e"+
"\0\u046e\0\u0e85\0\u0ec4\0\u046e\0\u046e\0\u0f03\0\u0f42\0\u046e"+
"\0\u046e\0\u0f81\0\u046e\0\u046e";
private static int [] zzUnpackRowMap() {
int [] result = new int[151];
int [] result = new int[148];
int offset = 0;
offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
return result;
@@ -278,82 +277,78 @@ class _RegExLexer implements FlexLexer {
private static final String ZZ_TRANS_PACKED_0 =
"\1\23\1\24\1\25\1\26\1\27\1\30\1\31\1\32"+
"\1\33\3\23\1\34\1\23\1\35\1\36\1\37\1\40"+
"\1\41\1\42\34\23\1\43\7\23\1\43\1\23\1\43"+
"\5\23\1\44\10\23\1\45\70\23\5\46\1\47\3\46"+
"\1\50\4\46\1\35\5\46\23\50\1\46\3\50\3\46"+
"\2\50\1\46\1\50\2\46\3\50\17\46\1\47\7\46"+
"\1\51\31\46\1\51\3\46\3\51\11\46\1\52\11\46"+
"\7\53\1\54\1\55\57\53\3\0\24\53\1\56\51\53"+
"\3\0\6\53\6\23\1\57\1\60\1\61\2\23\1\62"+
"\44\23\1\63\7\23\1\63\1\23\1\63\1\23\1\64"+
"\4\23\6\53\1\31\1\53\1\65\5\53\1\66\51\53"+
"\1\43\1\23\1\43\6\53\4\46\1\67\1\46\1\70"+
"\1\46\1\65\21\46\1\71\1\46\1\71\2\46\1\71"+
"\2\46\1\71\1\46\1\71\12\46\1\71\6\46\1\71"+
"\16\46\1\67\1\46\1\70\1\46\1\65\70\46\3\72"+
"\1\73\5\72\1\74\1\72\1\75\10\72\23\74\1\72"+
"\3\74\3\72\2\74\1\72\1\74\2\72\3\74\4\72"+
"\1\76\5\72\70\14\1\77\10\14\11\72\1\100\12\72"+
"\23\100\1\72\3\100\3\72\2\100\1\72\1\100\2\72"+
"\3\100\6\72\1\101\14\72\1\100\12\72\23\100\1\72"+
"\3\100\3\72\2\100\1\72\1\100\1\72\1\102\3\100"+
"\15\72\1\73\5\72\1\100\12\72\23\100\1\72\3\100"+
"\3\72\2\100\1\72\1\100\2\72\3\100\15\72\1\73"+
"\5\72\1\100\3\72\1\51\6\72\23\100\1\51\3\100"+
"\3\51\2\100\1\72\1\100\2\72\3\100\12\72\11\103"+
"\1\50\4\103\1\35\5\103\23\50\1\103\3\50\3\103"+
"\2\50\1\103\1\50\2\103\3\50\4\103\1\104\5\103"+
"\4\0\1\105\215\0\1\106\75\0\1\107\31\0\1\107"+
"\3\0\3\107\11\0\1\110\20\0\1\111\1\112\5\0"+
"\1\113\62\0\1\114\3\115\1\116\1\117\1\120\1\114"+
"\1\120\2\114\1\121\1\122\1\114\1\120\5\115\2\123"+
"\1\124\1\125\3\126\3\127\1\130\2\131\2\132\3\133"+
"\1\134\1\135\1\136\1\137\1\140\1\141\2\135\1\142"+
"\1\143\1\122\1\144\2\114\1\127\2\134\1\114\1\122"+
"\1\114\1\122\6\114\45\0\1\145\35\0\2\50\5\0"+
"\5\50\6\0\34\50\1\0\1\50\2\0\3\50\27\0"+
"\1\51\31\0\1\51\3\0\3\51\32\0\1\146\100\0"+
"\1\147\1\150\5\0\1\113\54\0\1\151\5\0\1\114"+
"\3\115\1\116\1\117\3\120\2\114\1\121\1\122\1\114"+
"\1\120\5\115\3\123\4\134\3\127\1\130\2\131\2\132"+
"\3\133\1\134\1\135\1\136\1\137\1\140\1\141\2\135"+
"\1\142\1\143\1\122\1\134\2\114\3\134\1\114\1\122"+
"\1\114\1\122\6\114\74\0\1\152\4\0\1\114\3\115"+
"\1\116\1\117\1\120\1\114\1\120\2\114\1\121\1\122"+
"\1\114\1\120\5\115\2\123\5\134\3\127\1\130\2\131"+
"\2\132\3\133\1\134\1\135\1\136\1\137\1\140\1\141"+
"\2\135\1\142\1\143\1\122\1\134\2\114\3\134\1\114"+
"\1\122\1\114\1\122\6\114\11\0\1\74\12\0\23\74"+
"\1\41\1\42\34\23\1\34\14\23\1\43\1\34\10\23"+
"\1\44\66\23\5\45\1\46\3\45\1\47\4\45\1\35"+
"\5\45\23\47\1\45\3\47\3\45\2\47\1\45\1\47"+
"\2\45\3\47\15\45\1\46\7\45\1\50\31\45\1\50"+
"\3\45\3\50\11\45\1\51\7\45\16\0\1\52\60\0"+
"\10\53\1\54\66\53\6\55\1\56\1\57\1\60\3\55"+
"\1\61\43\55\1\61\15\55\1\61\6\23\1\62\1\63"+
"\1\64\2\23\1\65\1\34\43\23\1\34\10\23\1\66"+
"\4\23\1\34\4\45\1\67\3\45\1\70\21\45\1\71"+
"\1\45\1\71\2\45\1\71\2\45\1\71\1\45\1\71"+
"\12\45\1\71\6\45\1\71\14\45\1\67\3\45\1\70"+
"\66\45\3\72\1\73\5\72\1\74\1\72\1\75\10\72"+
"\23\74\1\72\3\74\3\72\2\74\1\72\1\74\2\72"+
"\3\74\1\72\1\76\6\72\76\14\1\77\11\72\1\100"+
"\12\72\23\100\1\72\3\100\3\72\2\100\1\72\1\100"+
"\2\72\3\100\3\72\1\101\15\72\1\100\12\72\23\100"+
"\1\72\3\100\3\72\2\100\1\72\1\100\1\72\1\102"+
"\3\100\13\72\1\73\5\72\1\100\12\72\23\100\1\72"+
"\3\100\3\72\2\100\1\72\1\100\2\72\3\100\13\72"+
"\1\73\5\72\1\100\3\72\1\50\6\72\23\100\1\50"+
"\3\100\3\50\2\100\1\72\1\100\2\72\3\100\10\72"+
"\11\103\1\47\4\103\1\35\5\103\23\47\1\103\3\47"+
"\3\103\2\47\1\103\1\47\2\103\3\47\1\103\1\104"+
"\6\103\4\0\1\105\211\0\1\106\73\0\1\107\31\0"+
"\1\107\3\0\3\107\11\0\1\110\25\0\1\111\60\0"+
"\1\112\3\113\1\114\1\115\1\116\1\112\1\116\2\112"+
"\1\117\1\120\1\112\1\116\5\113\2\121\1\122\1\123"+
"\3\124\3\125\1\126\2\127\2\130\3\131\1\132\1\133"+
"\1\134\1\135\1\136\1\137\2\133\1\140\1\141\1\120"+
"\1\142\2\112\1\125\2\132\7\112\1\120\45\0\1\143"+
"\33\0\2\47\5\0\5\47\6\0\34\47\1\0\1\47"+
"\2\0\3\47\25\0\1\50\31\0\1\50\3\0\3\50"+
"\37\0\1\144\51\0\1\145\15\0\1\146\40\0\1\147"+
"\44\0\1\150\51\0\1\151\6\0\1\112\3\113\1\114"+
"\1\115\3\116\2\112\1\117\1\120\1\112\1\116\5\113"+
"\3\121\4\132\3\125\1\126\2\127\2\130\3\131\1\132"+
"\1\133\1\134\1\135\1\136\1\137\2\133\1\140\1\141"+
"\1\120\1\132\2\112\3\132\7\112\1\120\71\0\1\152"+
"\5\0\1\112\3\113\1\114\1\115\1\116\1\112\1\116"+
"\2\112\1\117\1\120\1\112\1\116\5\113\2\121\5\132"+
"\3\125\1\126\2\127\2\130\3\131\1\132\1\133\1\134"+
"\1\135\1\136\1\137\2\133\1\140\1\141\1\120\1\132"+
"\2\112\3\132\7\112\1\120\11\0\1\74\12\0\23\74"+
"\1\0\3\74\3\0\2\74\1\0\1\74\2\0\3\74"+
"\23\0\1\75\12\0\23\75\1\0\3\75\3\0\2\75"+
"\1\0\1\75\2\0\3\75\23\0\5\100\6\0\34\100"+
"\1\0\1\100\2\0\3\100\21\0\1\153\76\0\1\154"+
"\21\0\1\75\12\0\23\75\1\0\3\75\3\0\2\75"+
"\1\0\1\75\2\0\3\75\21\0\5\100\6\0\34\100"+
"\1\0\1\100\2\0\3\100\17\0\1\153\74\0\1\154"+
"\17\0\2\155\1\0\1\155\4\0\3\155\5\0\3\155"+
"\3\0\3\155\25\0\1\156\37\0\1\157\17\0\1\160"+
"\1\161\7\0\1\162\1\0\1\162\1\163\1\164\1\165"+
"\5\0\1\166\7\0\1\107\31\0\1\107\3\0\3\107"+
"\11\0\1\167\26\0\1\167\31\0\1\167\3\0\3\167"+
"\32\0\1\111\100\0\1\170\1\171\74\0\1\172\156\0"+
"\1\173\1\174\15\0\101\175\47\0\1\176\3\0\3\176"+
"\27\0\1\177\20\0\2\200\1\0\1\200\4\0\3\200"+
"\5\0\3\200\3\0\3\200\27\0\1\201\20\0\2\202"+
"\1\0\1\202\4\0\3\202\5\0\3\202\3\0\3\202"+
"\76\0\1\203\1\204\1\203\105\0\1\205\1\206\24\0"+
"\1\207\76\0\1\210\17\0\2\155\1\0\1\155\4\0"+
"\3\155\5\0\3\155\3\0\3\155\105\0\1\211\13\0"+
"\1\212\100\0\1\213\1\214\1\0\3\215\1\0\75\215"+
"\5\0\1\166\7\0\1\167\31\0\1\167\3\0\3\167"+
"\32\0\1\170\120\0\1\216\120\0\1\217\3\0\3\217"+
"\50\0\2\220\1\0\1\220\4\0\3\220\5\0\3\220"+
"\3\0\3\220\50\0\2\221\1\0\1\221\4\0\3\221"+
"\5\0\3\221\3\0\3\221\76\0\3\222\76\0\3\223"+
"\23\0\3\215\1\224\75\215\5\0\1\126\120\0\2\225"+
"\1\0\1\225\4\0\3\225\5\0\3\225\3\0\3\225"+
"\76\0\3\226\50\0\2\227\1\0\1\227\4\0\3\227"+
"\5\0\3\227\3\0\3\227\23\0";
"\3\0\3\155\23\0\1\156\37\0\1\157\17\0\1\160"+
"\1\161\4\0\1\162\1\0\1\162\1\163\1\164\1\165"+
"\6\0\1\166\7\0\1\107\31\0\1\107\3\0\3\107"+
"\11\0\1\167\24\0\1\167\31\0\1\167\3\0\3\167"+
"\25\0\1\170\154\0\1\171\1\172\13\0\77\173\47\0"+
"\1\174\3\0\3\174\25\0\1\175\20\0\2\176\1\0"+
"\1\176\4\0\3\176\5\0\3\176\3\0\3\176\25\0"+
"\1\177\20\0\2\200\1\0\1\200\4\0\3\200\5\0"+
"\3\200\3\0\3\200\74\0\1\201\1\202\1\201\103\0"+
"\1\203\1\204\20\0\1\205\17\0\2\155\1\0\1\155"+
"\4\0\3\155\5\0\3\155\3\0\3\155\103\0\1\206"+
"\10\0\1\207\76\0\1\210\1\211\2\0\3\212\1\0"+
"\73\212\5\0\1\166\7\0\1\167\31\0\1\167\3\0"+
"\3\167\50\0\1\213\116\0\1\214\3\0\3\214\46\0"+
"\2\215\1\0\1\215\4\0\3\215\5\0\3\215\3\0"+
"\3\215\46\0\2\216\1\0\1\216\4\0\3\216\5\0"+
"\3\216\3\0\3\216\74\0\3\217\74\0\3\220\21\0"+
"\3\212\1\221\73\212\5\0\1\124\116\0\2\222\1\0"+
"\1\222\4\0\3\222\5\0\3\222\3\0\3\222\74\0"+
"\3\223\46\0\2\224\1\0\1\224\4\0\3\224\5\0"+
"\3\224\3\0\3\224\21\0";
private static int [] zzUnpackTrans() {
int [] result = new int[4355];
int [] result = new int[4032];
int offset = 0;
offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
return result;
@@ -392,17 +387,17 @@ class _RegExLexer implements FlexLexer {
private static final String ZZ_ATTRIBUTE_PACKED_0 =
"\13\0\1\1\6\0\2\11\1\1\1\11\1\1\1\11"+
"\1\1\1\11\1\1\11\11\1\1\2\11\2\1\3\11"+
"\1\1\1\11\1\1\1\11\1\1\2\11\2\1\2\11"+
"\1\1\3\11\2\1\2\11\1\1\3\11\3\1\2\0"+
"\1\11\1\0\1\1\10\11\2\1\2\11\1\1\4\11"+
"\1\1\1\11\3\1\2\11\1\1\3\11\1\0\4\11"+
"\1\1\1\11\1\0\1\1\4\11\1\0\1\11\1\0"+
"\1\11\2\0\3\11\1\1\1\11\1\1\1\11\3\1"+
"\10\11\2\0\2\11\2\1\2\11\1\1\2\11";
"\1\1\1\11\1\1\10\11\1\1\2\11\2\1\3\11"+
"\1\1\1\11\1\1\1\11\1\1\1\11\1\1\1\11"+
"\1\1\1\11\1\1\1\11\1\1\3\11\2\1\2\11"+
"\1\1\3\11\3\1\2\0\11\11\2\1\2\11\1\1"+
"\4\11\1\1\1\11\3\1\2\11\1\1\12\11\1\1"+
"\1\11\1\0\1\1\4\11\1\0\1\11\2\0\3\11"+
"\1\1\1\11\1\1\1\11\3\1\7\11\2\0\2\11"+
"\2\1\2\11\1\1\2\11";
private static int [] zzUnpackAttribute() {
int [] result = new int[151];
int [] result = new int[148];
int offset = 0;
offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
return result;
@@ -459,7 +454,7 @@ class _RegExLexer implements FlexLexer {
/* user code: */
// This adds support for nested states. I'm no JFlex pro, so maybe this is overkill, but it works quite well.
final ArrayList<Integer> states = new ArrayList<>();
final IntArrayList states = new IntArrayList();
// This was an idea to use the regex implementation for XML schema regexes (which use a slightly different syntax)
// as well, but is currently unfinished as it requires to tweak more places than just the lexer.
@@ -804,7 +799,7 @@ class _RegExLexer implements FlexLexer {
}
case 107: break;
case 8:
{ if (yystate() == CLASS2 && !allowNestedCharacterClasses) return RegExpTT.CHARACTER; yypushstate(CLASS2); return RegExpTT.CLASS_BEGIN;
{ yypushstate(CLASS1); return RegExpTT.CLASS_BEGIN;
}
case 108: break;
case 9:
@@ -816,7 +811,7 @@ class _RegExLexer implements FlexLexer {
}
case 110: break;
case 11:
{ return commentMode ? com.intellij.psi.TokenType.WHITE_SPACE : RegExpTT.CHARACTER;
{ return commentMode ? com.intellij.psi.TokenType.WHITE_SPACE : RegExpTT.CTRL_CHARACTER;
}
case 111: break;
case 12:
@@ -844,67 +839,63 @@ class _RegExLexer implements FlexLexer {
}
case 117: break;
case 18:
{ return commentMode ? com.intellij.psi.TokenType.WHITE_SPACE : RegExpTT.CTRL_CHARACTER;
{ if (commentMode) { yypushstate(COMMENT); return RegExpTT.COMMENT; } else return RegExpTT.CHARACTER;
}
case 118: break;
case 19:
{ if (commentMode) { yypushstate(COMMENT); return RegExpTT.COMMENT; } else return RegExpTT.CHARACTER;
{ yypopstate(); yypushback(1);
}
case 119: break;
case 20:
{ yypopstate(); yypushback(1);
{ yypopstate(); return RegExpTT.RBRACE;
}
case 120: break;
case 21:
{ yypopstate(); return RegExpTT.RBRACE;
{ return RegExpTT.NAME;
}
case 121: break;
case 22:
{ return RegExpTT.NAME;
{ return RegExpTT.NUMBER;
}
case 122: break;
case 23:
{ return RegExpTT.NUMBER;
{ return RegExpTT.COMMA;
}
case 123: break;
case 24:
{ return RegExpTT.COMMA;
{ yybegin(CLASS1); return RegExpTT.CARET;
}
case 124: break;
case 25:
{ assert false : yytext();
{ states.set(states.size() - 1, CLASS2); return RegExpTT.CHARACTER;
}
case 125: break;
case 26:
{ yybegin(CLASS2); return RegExpTT.CHARACTER;
{ yypushback(1); yybegin(CLASS2);
}
case 126: break;
case 27:
{ yybegin(CLASS1); return RegExpTT.CARET;
{ yybegin(CLASS2); if (allowNestedCharacterClasses) { yypushstate(CLASS1); return RegExpTT.CLASS_BEGIN; } return RegExpTT.CHARACTER;
}
case 127: break;
case 28:
{ if (allowNestedCharacterClasses) {
yypushstate(CLASS2);
return RegExpTT.CLASS_BEGIN;
}
return RegExpTT.CHARACTER;
{ if (allowEmptyCharacterClass) { yypopstate(); return RegExpTT.CLASS_END; } yybegin(CLASS2); return RegExpTT.CHARACTER;
}
case 128: break;
case 29:
{ yypopstate(); return RegExpTT.CLASS_END;
{ if (commentMode) return com.intellij.psi.TokenType.WHITE_SPACE; yypushback(1); yybegin(CLASS2);
}
case 129: break;
case 30:
{ return RegExpTT.MINUS;
{ if (allowNestedCharacterClasses) { yypushstate(CLASS1); return RegExpTT.CLASS_BEGIN; } return RegExpTT.CHARACTER;
}
case 130: break;
case 31:
{ return commentMode ? com.intellij.psi.TokenType.WHITE_SPACE : RegExpTT.ESC_CHARACTER;
{ yypopstate(); return RegExpTT.CLASS_END;
}
case 131: break;
case 32:
{ yybegin(CLASS2); return RegExpTT.CARET;
{ return RegExpTT.MINUS;
}
case 132: break;
case 33:
@@ -959,70 +950,62 @@ class _RegExLexer implements FlexLexer {
// lookahead expression with fixed base length
zzMarkedPos = Character.offsetByCodePoints
(zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1);
{ if (yystate() == CLASS2 && !allowNestedCharacterClasses) return RegExpTT.CHARACTER;
if (allowEmptyCharacterClass) yypushstate(CLASS2); else yypushstate(CLASS1); return RegExpTT.CLASS_BEGIN;
{ yypushstate(NEGATED_CLASS); return RegExpTT.CLASS_BEGIN;
}
case 145: break;
case 46:
// lookahead expression with fixed base length
zzMarkedPos = Character.offsetByCodePoints
(zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1);
{ if (yystate() == CLASS2 && !allowNestedCharacterClasses) return RegExpTT.CHARACTER; yypushstate(NEGATE_CLASS2); return RegExpTT.CLASS_BEGIN;
{ return RegExpTT.REDUNDANT_ESCAPE;
}
case 146: break;
case 47:
{ return RegExpTT.REDUNDANT_ESCAPE;
{ return (yystate() == CLASS2) ? RegExpTT.REDUNDANT_ESCAPE : RegExpTT.ESC_CHARACTER;
}
case 147: break;
case 48:
{ return (yystate() == CLASS2) ? RegExpTT.REDUNDANT_ESCAPE : RegExpTT.ESC_CHARACTER;
{ return (allowDanglingMetacharacters != Boolean.TRUE && yystate() != CLASS2) ? RegExpTT.ESC_CHARACTER : RegExpTT.REDUNDANT_ESCAPE;
}
case 148: break;
case 49:
{ return (allowDanglingMetacharacters != Boolean.TRUE && yystate() != CLASS2) ? RegExpTT.ESC_CHARACTER : RegExpTT.REDUNDANT_ESCAPE;
{ return (allowDanglingMetacharacters == Boolean.FALSE && yystate() != CLASS2) ? RegExpTT.ESC_CHARACTER : RegExpTT.REDUNDANT_ESCAPE;
}
case 149: break;
case 50:
{ return (allowDanglingMetacharacters == Boolean.FALSE && yystate() != CLASS2) ? RegExpTT.ESC_CHARACTER : RegExpTT.REDUNDANT_ESCAPE;
{ return RegExpTT.ESC_CHARACTER;
}
case 150: break;
case 51:
{ return RegExpTT.ESC_CHARACTER;
{ return (yystate() == CLASS2) ? RegExpTT.ESC_CHARACTER : RegExpTT.REDUNDANT_ESCAPE;
}
case 151: break;
case 52:
{ return (yystate() == CLASS2) ? RegExpTT.ESC_CHARACTER : RegExpTT.REDUNDANT_ESCAPE;
{ return commentMode ? RegExpTT.ESC_CTRL_CHARACTER : RegExpTT.REDUNDANT_ESCAPE;
}
case 152: break;
case 53:
{ return commentMode ? RegExpTT.CHARACTER : RegExpTT.REDUNDANT_ESCAPE;
{ return RegExpTT.ESC_CTRL_CHARACTER;
}
case 153: break;
case 54:
{ return RegExpTT.ESC_CTRL_CHARACTER;
{ return RegExpTT.BOUNDARY;
}
case 154: break;
case 55:
{ return RegExpTT.BOUNDARY;
{ return RegExpTT.CHAR_CLASS;
}
case 155: break;
case 56:
{ return RegExpTT.CHAR_CLASS;
{ if (xmlSchemaMode) return RegExpTT.CHAR_CLASS; else return StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN;
}
case 156: break;
case 57:
{ if (xmlSchemaMode) return RegExpTT.CHAR_CLASS; else return StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN;
{ yypushstate(PROP); return RegExpTT.PROPERTY;
}
case 157: break;
case 58:
{ yypushstate(PROP); return RegExpTT.PROPERTY;
{ return allowTransformationEscapes ? RegExpTT.CHAR_CLASS : StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN;
}
case 158: break;
case 59:
{ return allowTransformationEscapes ? RegExpTT.CHAR_CLASS : StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN;
}
case 159: break;
case 60:
{ String text = yytext().toString().substring(1);
if (allowOctalNoLeadingZero) {
if (Integer.parseInt(text) <= capturingGroupCount && yystate() != CLASS2) return RegExpTT.BACKREF;
@@ -1064,162 +1047,157 @@ class _RegExLexer implements FlexLexer {
return RegExpTT.BACKREF;
}
}
case 159: break;
case 60:
{ yypushstate(QUOTED); return RegExpTT.QUOTE_BEGIN;
}
case 160: break;
case 61:
{ yypushstate(QUOTED); return RegExpTT.QUOTE_BEGIN;
{ return RegExpTT.BAD_HEX_VALUE;
}
case 161: break;
case 62:
{ return RegExpTT.BAD_HEX_VALUE;
{ return allowTransformationEscapes ? RegExpTT.CHAR_CLASS : StringEscapesTokenTypes.INVALID_UNICODE_ESCAPE_TOKEN;
}
case 162: break;
case 63:
{ return allowTransformationEscapes ? RegExpTT.CHAR_CLASS : StringEscapesTokenTypes.INVALID_UNICODE_ESCAPE_TOKEN;
{ return (allowOctalNoLeadingZero ? RegExpTT.OCT_CHAR : RegExpTT.BAD_OCT_VALUE);
}
case 163: break;
case 64:
{ return (allowOctalNoLeadingZero ? RegExpTT.OCT_CHAR : RegExpTT.BAD_OCT_VALUE);
{ return (allowHexDigitClass || allowHorizontalWhitespaceClass ? RegExpTT.CHAR_CLASS : StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN);
}
case 164: break;
case 65:
{ return (allowHexDigitClass || allowHorizontalWhitespaceClass ? RegExpTT.CHAR_CLASS : StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN);
{ yypushstate(NAMED); return RegExpTT.NAMED_CHARACTER;
}
case 165: break;
case 66:
{ yypushstate(NAMED); return RegExpTT.NAMED_CHARACTER;
{ yypopstate(); return RegExpTT.QUOTE_END;
}
case 166: break;
case 67:
{ yypopstate(); return RegExpTT.QUOTE_END;
}
case 167: break;
case 68:
{ yybegin(CLASS2); return RegExpTT.REDUNDANT_ESCAPE;
}
case 168: break;
case 69:
// lookahead expression with fixed base length
zzMarkedPos = Character.offsetByCodePoints
(zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1);
{ if (allowNestedCharacterClasses) {
yypushstate(CLASS1);
return RegExpTT.CLASS_BEGIN;
}
return RegExpTT.CHARACTER;
{ yybegin(CLASS2); if (allowNestedCharacterClasses) { yypushstate(NEGATED_CLASS); return RegExpTT.CLASS_BEGIN; } return RegExpTT.CHARACTER;
}
case 167: break;
case 68:
// lookahead expression with fixed base length
zzMarkedPos = Character.offsetByCodePoints
(zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1);
{ yybegin(CLASS2); if (allowPosixBracketExpressions) { yypushback(1); } else if (allowNestedCharacterClasses) { yypushstate(CLASS1); return RegExpTT.CLASS_BEGIN; } else { return RegExpTT.CHARACTER; }
}
case 168: break;
case 69:
{ yybegin(CLASS2); return allowEmptyCharacterClass ? RegExpTT.ESC_CHARACTER : RegExpTT.REDUNDANT_ESCAPE;
}
case 169: break;
case 70:
{ yypushstate(QUOTED_CLASS1); return RegExpTT.QUOTE_BEGIN;
}
case 170: break;
case 71:
// lookahead expression with fixed base length
zzMarkedPos = Character.offsetByCodePoints
(zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1);
{ if (allowNestedCharacterClasses) { yypushstate(NEGATED_CLASS); return RegExpTT.CLASS_BEGIN; } return RegExpTT.CHARACTER;
}
case 171: break;
case 72:
{ if (allowPosixBracketExpressions) {
yybegin(BRACKET_EXPRESSION);
return RegExpTT.BRACKET_EXPRESSION_BEGIN;
} else {
yypushback(1);
return RegExpTT.CHARACTER;
return allowNestedCharacterClasses ? RegExpTT.CLASS_BEGIN : RegExpTT.CHARACTER;
}
}
case 170: break;
case 71:
{ if (allowNestedCharacterClasses) return RegExpTT.ANDAND; else yypushback(1); return RegExpTT.CHARACTER;
}
case 171: break;
case 72:
{ yybegin(CLASS2); return RegExpTT.BRACKET_EXPRESSION_END;
}
case 172: break;
case 73:
{ yybegin(PY_COND_REF); return RegExpTT.PYTHON_COND_REF;
{ if (allowNestedCharacterClasses) return RegExpTT.ANDAND; else yypushback(1); return RegExpTT.CHARACTER;
}
case 173: break;
case 74:
{ yybegin(NAMED_GROUP); capturingGroupCount++; return RegExpTT.RUBY_NAMED_GROUP;
{ yybegin(CLASS2); return RegExpTT.BRACKET_EXPRESSION_END;
}
case 174: break;
case 75:
{ yybegin(QUOTED_NAMED_GROUP); capturingGroupCount++; return RegExpTT.RUBY_QUOTED_NAMED_GROUP;
{ yybegin(PY_COND_REF); return RegExpTT.PYTHON_COND_REF;
}
case 175: break;
case 76:
{ return RegExpTT.NON_CAPT_GROUP;
{ yybegin(NAMED_GROUP); capturingGroupCount++; return RegExpTT.RUBY_NAMED_GROUP;
}
case 176: break;
case 77:
{ return RegExpTT.POS_LOOKAHEAD;
{ yybegin(QUOTED_NAMED_GROUP); capturingGroupCount++; return RegExpTT.RUBY_QUOTED_NAMED_GROUP;
}
case 177: break;
case 78:
{ return RegExpTT.NEG_LOOKAHEAD;
{ return RegExpTT.NON_CAPT_GROUP;
}
case 178: break;
case 79:
{ return RegExpTT.POS_LOOKAHEAD;
}
case 179: break;
case 80:
{ return RegExpTT.NEG_LOOKAHEAD;
}
case 180: break;
case 81:
// lookahead expression with fixed base length
zzMarkedPos = Character.offsetByCodePoints
(zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1);
{ yypushstate(QUANTIFIER); return RegExpTT.LBRACE;
}
case 179: break;
case 80:
// lookahead expression with fixed base length
zzMarkedPos = Character.offsetByCodePoints
(zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1);
{ if (yystate() == CLASS2 && !allowNestedCharacterClasses) return RegExpTT.CHARACTER;
if (allowEmptyCharacterClass) yypushstate(CLASS2); else yypushstate(NEGATE_CLASS1); return RegExpTT.CLASS_BEGIN;
}
case 180: break;
case 81:
{ yybegin(NAMED_GROUP); return RegExpTT.RUBY_NAMED_GROUP_CALL;
}
case 181: break;
case 82:
{ yybegin(QUOTED_NAMED_GROUP); return RegExpTT.RUBY_QUOTED_NAMED_GROUP_CALL;
{ yybegin(NAMED_GROUP); return RegExpTT.RUBY_NAMED_GROUP_CALL;
}
case 182: break;
case 83:
{ if (xmlSchemaMode) { yypushback(1); return RegExpTT.CHAR_CLASS; } else return RegExpTT.CTRL;
{ yybegin(QUOTED_NAMED_GROUP); return RegExpTT.RUBY_QUOTED_NAMED_GROUP_CALL;
}
case 183: break;
case 84:
{ if (xmlSchemaMode) { yypushback(1); return RegExpTT.CHAR_CLASS; } else return RegExpTT.CTRL;
}
case 184: break;
case 85:
// lookahead expression with fixed base length
zzMarkedPos = Character.offsetByCodePoints
(zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 2);
{ if (allowExtendedUnicodeCharacter) yypushstate(EMBRACED_HEX); else return RegExpTT.BAD_HEX_VALUE;
}
case 184: break;
case 85:
{ if (allowOneHexCharEscape) { return RegExpTT.HEX_CHAR; } else { yypushback(1); return RegExpTT.BAD_HEX_VALUE; }
}
case 185: break;
case 86:
{ if (allowOneHexCharEscape) { return RegExpTT.HEX_CHAR; } else { yypushback(1); return RegExpTT.BAD_HEX_VALUE; }
}
case 186: break;
case 87:
// lookahead expression with fixed base length
zzMarkedPos = Character.offsetByCodePoints
(zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 2);
{ if (allowExtendedUnicodeCharacter) yypushstate(EMBRACED_HEX); else return StringEscapesTokenTypes.INVALID_UNICODE_ESCAPE_TOKEN;
}
case 186: break;
case 87:
{ yypushback(yylength() - 2); return StringEscapesTokenTypes.INVALID_UNICODE_ESCAPE_TOKEN;
}
case 187: break;
case 88:
{ return RegExpTT.OCT_CHAR;
{ yypushback(yylength() - 2); return StringEscapesTokenTypes.INVALID_UNICODE_ESCAPE_TOKEN;
}
case 188: break;
case 89:
{ yybegin(NAMED_GROUP); return RegExpTT.RUBY_NAMED_GROUP_REF;
{ return RegExpTT.OCT_CHAR;
}
case 189: break;
case 90:
{ yybegin(QUOTED_NAMED_GROUP); return RegExpTT.RUBY_QUOTED_NAMED_GROUP_REF;
{ yybegin(NAMED_GROUP); return RegExpTT.RUBY_NAMED_GROUP_REF;
}
case 190: break;
case 91:
// lookahead expression with fixed base length
zzMarkedPos = Character.offsetByCodePoints
(zzBufferL/*, zzStartRead, zzEndRead - zzStartRead*/, zzStartRead, 1);
{ if (allowNestedCharacterClasses) {
yypushstate(CLASS1);
return RegExpTT.CLASS_BEGIN;
}
return RegExpTT.CHARACTER;
{ yybegin(QUOTED_NAMED_GROUP); return RegExpTT.RUBY_QUOTED_NAMED_GROUP_REF;
}
case 191: break;
case 92:
@@ -5,7 +5,7 @@ import com.intellij.lexer.FlexLexer;
import com.intellij.psi.StringEscapesTokenTypes;
import com.intellij.psi.tree.IElementType;
import java.util.ArrayList;
import com.intellij.util.containers.IntArrayList;
import java.util.EnumSet;
@SuppressWarnings("ALL")
@@ -19,7 +19,7 @@ import java.util.EnumSet;
%{
// This adds support for nested states. I'm no JFlex pro, so maybe this is overkill, but it works quite well.
final ArrayList<Integer> states = new ArrayList<>();
final IntArrayList states = new IntArrayList();
// This was an idea to use the regex implementation for XML schema regexes (which use a slightly different syntax)
// as well, but is currently unfinished as it requires to tweak more places than just the lexer.
@@ -94,10 +94,10 @@ import java.util.EnumSet;
%xstate QUOTED
%xstate EMBRACED
%xstate QUANTIFIER
%xstate NEGATED_CLASS
%xstate QUOTED_CLASS1
%xstate CLASS1
%xstate NEGATE_CLASS1
%state CLASS2
%state NEGATE_CLASS2
%state PROP
%state NAMED
%xstate OPTIONS
@@ -137,10 +137,10 @@ HEX_CHAR=[0-9a-fA-F]
%%
"\\Q" { yypushstate(QUOTED); return RegExpTT.QUOTE_BEGIN; }
{ESCAPE} "Q" { yypushstate(QUOTED); return RegExpTT.QUOTE_BEGIN; }
<QUOTED> {
"\\E" { yypopstate(); return RegExpTT.QUOTE_END; }
{ESCAPE} "E" { yypopstate(); return RegExpTT.QUOTE_END; }
{ANY} { return RegExpTT.CHARACTER; }
}
@@ -232,7 +232,7 @@ HEX_CHAR=[0-9a-fA-F]
{ESCAPE} [hH] { return (allowHexDigitClass || allowHorizontalWhitespaceClass ? RegExpTT.CHAR_CLASS : StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN); }
{ESCAPE} "N" { yypushstate(NAMED); return RegExpTT.NAMED_CHARACTER; }
{ESCAPE} {TRANSFORMATION} { return allowTransformationEscapes ? RegExpTT.CHAR_CLASS : StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN; }
{ESCAPE} [\n\b\t\r\f ] { return commentMode ? RegExpTT.CHARACTER : RegExpTT.REDUNDANT_ESCAPE; }
{ESCAPE} [\n\b\t\r\f ] { return commentMode ? RegExpTT.ESC_CTRL_CHARACTER : RegExpTT.REDUNDANT_ESCAPE; }
<CLASS2> {
{ESCAPE} {RBRACKET} { return RegExpTT.ESC_CHARACTER; }
@@ -286,69 +286,47 @@ HEX_CHAR=[0-9a-fA-F]
{ANY} { yypopstate(); yypushback(1); }
}
<CLASS2> {
{LBRACKET} { if (allowNestedCharacterClasses) {
yypushstate(CLASS2);
return RegExpTT.CLASS_BEGIN;
}
return RegExpTT.CHARACTER;
}
{LBRACKET} / {RBRACKET} { if (allowNestedCharacterClasses) {
yypushstate(CLASS1);
return RegExpTT.CLASS_BEGIN;
}
return RegExpTT.CHARACTER;
}
{LBRACKET} / {ESCAPE} {RBRACKET} { if (allowNestedCharacterClasses) {
yypushstate(CLASS1);
return RegExpTT.CLASS_BEGIN;
}
return RegExpTT.CHARACTER;
}
<YYINITIAL> {
{LBRACKET} / "^" { yypushstate(NEGATED_CLASS); return RegExpTT.CLASS_BEGIN; }
{LBRACKET} { yypushstate(CLASS1); return RegExpTT.CLASS_BEGIN; }
}
{LBRACKET} / ({RBRACKET} | {ESCAPE} {RBRACKET}) { if (yystate() == CLASS2 && !allowNestedCharacterClasses) return RegExpTT.CHARACTER;
if (allowEmptyCharacterClass) yypushstate(CLASS2); else yypushstate(CLASS1); return RegExpTT.CLASS_BEGIN; }
{LBRACKET} / "^" ({RBRACKET} | {ESCAPE} {RBRACKET}) { if (yystate() == CLASS2 && !allowNestedCharacterClasses) return RegExpTT.CHARACTER;
if (allowEmptyCharacterClass) yypushstate(CLASS2); else yypushstate(NEGATE_CLASS1); return RegExpTT.CLASS_BEGIN; }
{LBRACKET} / "^" { if (yystate() == CLASS2 && !allowNestedCharacterClasses) return RegExpTT.CHARACTER; yypushstate(NEGATE_CLASS2); return RegExpTT.CLASS_BEGIN; }
{LBRACKET} { if (yystate() == CLASS2 && !allowNestedCharacterClasses) return RegExpTT.CHARACTER; yypushstate(CLASS2); return RegExpTT.CLASS_BEGIN; }
/* []abc] is legal. The first ] is treated as literal character */
<NEGATED_CLASS> {
"^" { yybegin(CLASS1); return RegExpTT.CARET; }
}
<QUOTED_CLASS1> {
"\\E" { yypopstate(); return RegExpTT.QUOTE_END; }
{ANY} { states.set(states.size() - 1, CLASS2); return RegExpTT.CHARACTER; }
}
<CLASS1> {
{ESCAPE} {RBRACKET} { yybegin(CLASS2); return RegExpTT.REDUNDANT_ESCAPE; }
{RBRACKET} { yybegin(CLASS2); return RegExpTT.CHARACTER; }
. { assert false : yytext(); }
}
<NEGATE_CLASS1> {
"^" { yybegin(CLASS1); return RegExpTT.CARET; }
. { assert false : yytext(); }
}
<NEGATE_CLASS2> {
"^" { yybegin(CLASS2); return RegExpTT.CARET; }
. { assert false : yytext(); }
{ESCAPE} "Q" { yypushstate(QUOTED_CLASS1); return RegExpTT.QUOTE_BEGIN; }
{ESCAPE} {RBRACKET} { yybegin(CLASS2); return allowEmptyCharacterClass ? RegExpTT.ESC_CHARACTER : RegExpTT.REDUNDANT_ESCAPE; }
{RBRACKET} { if (allowEmptyCharacterClass) { yypopstate(); return RegExpTT.CLASS_END; } yybegin(CLASS2); return RegExpTT.CHARACTER; }
{LBRACKET} / ":" { yybegin(CLASS2); if (allowPosixBracketExpressions) { yypushback(1); } else if (allowNestedCharacterClasses) { yypushstate(CLASS1); return RegExpTT.CLASS_BEGIN; } else { return RegExpTT.CHARACTER; } }
{LBRACKET} / "^" { yybegin(CLASS2); if (allowNestedCharacterClasses) { yypushstate(NEGATED_CLASS); return RegExpTT.CLASS_BEGIN; } return RegExpTT.CHARACTER; }
{LBRACKET} { yybegin(CLASS2); if (allowNestedCharacterClasses) { yypushstate(CLASS1); return RegExpTT.CLASS_BEGIN; } return RegExpTT.CHARACTER; }
[\n\b\t\r\f ] { if (commentMode) return com.intellij.psi.TokenType.WHITE_SPACE; yypushback(1); yybegin(CLASS2); }
{ANY} { yypushback(1); yybegin(CLASS2); }
}
<CLASS2> {
{LBRACKET} ":" { if (allowPosixBracketExpressions) {
{LBRACKET} ":" { if (allowPosixBracketExpressions) {
yybegin(BRACKET_EXPRESSION);
return RegExpTT.BRACKET_EXPRESSION_BEGIN;
} else {
yypushback(1);
return RegExpTT.CHARACTER;
return allowNestedCharacterClasses ? RegExpTT.CLASS_BEGIN : RegExpTT.CHARACTER;
}
}
{LBRACKET} / "^" { if (allowNestedCharacterClasses) { yypushstate(NEGATED_CLASS); return RegExpTT.CLASS_BEGIN; } return RegExpTT.CHARACTER; }
{LBRACKET} { if (allowNestedCharacterClasses) { yypushstate(CLASS1); return RegExpTT.CLASS_BEGIN; } return RegExpTT.CHARACTER; }
{RBRACKET} { yypopstate(); return RegExpTT.CLASS_END; }
"&&" { if (allowNestedCharacterClasses) return RegExpTT.ANDAND; else yypushback(1); return RegExpTT.CHARACTER; }
"-" { return RegExpTT.MINUS; }
[\n\b\t\r\f] { return commentMode ? com.intellij.psi.TokenType.WHITE_SPACE : RegExpTT.ESC_CHARACTER; }
[\n\b\t\r\f ] { return commentMode ? com.intellij.psi.TokenType.WHITE_SPACE : RegExpTT.CTRL_CHARACTER; }
{ANY} { return RegExpTT.CHARACTER; }
}
@@ -434,7 +412,6 @@ HEX_CHAR=[0-9a-fA-F]
[^\r\n]*[\r\n]? { yypopstate(); return RegExpTT.COMMENT; }
}
" " { return commentMode ? com.intellij.psi.TokenType.WHITE_SPACE : RegExpTT.CHARACTER; }
[\n\b\t\r\f] { return commentMode ? com.intellij.psi.TokenType.WHITE_SPACE : RegExpTT.CTRL_CHARACTER; }
[\n\b\t\r\f ] { return commentMode ? com.intellij.psi.TokenType.WHITE_SPACE : RegExpTT.CTRL_CHARACTER; }
{ANY} { return RegExpTT.CHARACTER; }
@@ -39,8 +39,7 @@ public class RegExpLexerTest extends LexerTestCase {
public void testQE() {
final RegExpLexer lexer = new RegExpLexer(EnumSet.noneOf(RegExpCapability.class));
doTest("\\Q\r\n\\E", "QUOTE_BEGIN ('\\Q')\n" +
"CHARACTER ('\n" +
"')\n" +
"CHARACTER ('\n')\n" +
"CHARACTER ('\\n')\n" +
"QUOTE_END ('\\E')", lexer);
}
@@ -343,6 +342,68 @@ public class RegExpLexerTest extends LexerTestCase {
doTest("[]]", "CLASS_BEGIN ('[')\n" +
"CHARACTER (']')\n" +
"CLASS_END (']')", lexer);
doTest("[\\]]", "CLASS_BEGIN ('[')\n" +
"REDUNDANT_ESCAPE ('\\]')\n" +
"CLASS_END (']')", lexer);
doTest("[[]]]", "CLASS_BEGIN ('[')\n" +
"CLASS_BEGIN ('[')\n" +
"CHARACTER (']')\n" +
"CLASS_END (']')\n" +
"CLASS_END (']')", lexer);
doTest("[ \\]]", "CLASS_BEGIN ('[')\n" +
"CTRL_CHARACTER (' ')\n" +
"ESC_CHARACTER ('\\]')\n" +
"CLASS_END (']')", lexer);
doTest("[\\Q\\E]]", "CLASS_BEGIN ('[')\n" +
"QUOTE_BEGIN ('\\Q')\n" +
"QUOTE_END ('\\E')\n" +
"CHARACTER (']')\n" +
"CLASS_END (']')", lexer);
doTest("[\\Q+\\E]]", "CLASS_BEGIN ('[')\n" +
"QUOTE_BEGIN ('\\Q')\n" +
"CHARACTER ('+')\n" +
"QUOTE_END ('\\E')\n" +
"CLASS_END (']')\n" +
"CHARACTER (']')", lexer);
doTest("[^\\Q\\E]]", "CLASS_BEGIN ('[')\n" +
"CARET ('^')\n" +
"QUOTE_BEGIN ('\\Q')\n" +
"QUOTE_END ('\\E')\n" +
"CHARACTER (']')\n" +
"CLASS_END (']')", lexer);
doTest("[^\\Q+\\E]]", "CLASS_BEGIN ('[')\n" +
"CARET ('^')\n" +
"QUOTE_BEGIN ('\\Q')\n" +
"CHARACTER ('+')\n" +
"QUOTE_END ('\\E')\n" +
"CLASS_END (']')\n" +
"CHARACTER (']')", lexer);
final RegExpLexer lexer2 = new RegExpLexer(EnumSet.of(COMMENT_MODE));
doTest("[ \t\n]]", "CLASS_BEGIN ('[')\n" +
"WHITE_SPACE (' ')\n" +
"WHITE_SPACE ('\t')\n" +
"WHITE_SPACE ('\\n')\n" +
"CHARACTER (']')\n" +
"CLASS_END (']')", lexer2);
doTest("[\\ ]", "CLASS_BEGIN ('[')\n" +
"ESC_CTRL_CHARACTER ('\\ ')\n" +
"CLASS_END (']')", lexer2);
final RegExpLexer lexer3 = new RegExpLexer(EnumSet.of(ALLOW_EMPTY_CHARACTER_CLASS));
doTest("[]]", "CLASS_BEGIN ('[')\n" +
"CLASS_END (']')\n" +
"CHARACTER (']')", lexer3);
doTest("[[]]]", "CLASS_BEGIN ('[')\n" +
"CHARACTER ('[')\n" +
"CLASS_END (']')\n" +
"CHARACTER (']')\n" +
"CHARACTER (']')", lexer3);
doTest("[\\]]", "CLASS_BEGIN ('[')\n" +
"ESC_CHARACTER ('\\]')\n" +
"CLASS_END (']')", lexer3);
doTest("[ \\]]", "CLASS_BEGIN ('[')\n" +
"CTRL_CHARACTER (' ')\n" +
"ESC_CHARACTER ('\\]')\n" +
"CLASS_END (']')", lexer3);
}
public void testBoundaries() {
@@ -381,7 +442,7 @@ public class RegExpLexerTest extends LexerTestCase {
"CHARACTER ('<')\n" +
"CHARACTER ('a')\n" +
"CHARACTER ('>')\n" +
"CHARACTER (' ')\n" +
"CTRL_CHARACTER (' ')\n" +
"CHARACTER ('(')\n" +
"CHARACTER ('?')\n" +
"CHARACTER ('<')\n" +
@@ -475,6 +536,32 @@ public class RegExpLexerTest extends LexerTestCase {
"CLASS_END (']')", lexer);
}
public void testControlCharacters() {
final RegExpLexer lexer = new RegExpLexer(EnumSet.noneOf(RegExpCapability.class));
doTest("\\n\\b\\t\\r\\f[\\n\\b\\t\\r\\f]", "ESC_CTRL_CHARACTER ('\\n')\n" +
"BOUNDARY ('\\b')\n" +
"ESC_CTRL_CHARACTER ('\\t')\n" +
"ESC_CTRL_CHARACTER ('\\r')\n" +
"ESC_CTRL_CHARACTER ('\\f')\n" +
"CLASS_BEGIN ('[')\n" +
"ESC_CTRL_CHARACTER ('\\n')\n" +
"ESC_CTRL_CHARACTER ('\\b')\n" +
"ESC_CTRL_CHARACTER ('\\t')\n" +
"ESC_CTRL_CHARACTER ('\\r')\n" +
"ESC_CTRL_CHARACTER ('\\f')\n" +
"CLASS_END (']')", lexer);
doTest("\n\t\r\f[\n\t\r\f]", "CTRL_CHARACTER ('\\n')\n" +
"CTRL_CHARACTER ('\t')\n" +
"CTRL_CHARACTER ('\n')\n" +
"CTRL_CHARACTER ('\f')\n" +
"CLASS_BEGIN ('[')\n" +
"CTRL_CHARACTER ('\\n')\n" +
"CTRL_CHARACTER ('\t')\n" +
"CTRL_CHARACTER ('\n')\n" +
"CTRL_CHARACTER ('\f')\n" +
"CLASS_END (']')", lexer);
}
@Override
protected Lexer createLexer() {
return null;
+3 -3
View File
@@ -4,14 +4,14 @@ REGEXP_FILE
RegExpSimpleClassImpl: <\h>
PsiElement(CHAR_CLASS)('\h')
RegExpCharImpl: < >
PsiElement(CHARACTER)(' ')
PsiElement(CTRL_CHARACTER)(' ')
RegExpSimpleClassImpl: <\H>
PsiElement(CHAR_CLASS)('\H')
RegExpCharImpl: < >
PsiElement(CHARACTER)(' ')
PsiElement(CTRL_CHARACTER)(' ')
RegExpSimpleClassImpl: <\v>
PsiElement(CHAR_CLASS)('\v')
RegExpCharImpl: < >
PsiElement(CHARACTER)(' ')
PsiElement(CTRL_CHARACTER)(' ')
RegExpSimpleClassImpl: <\V>
PsiElement(CHAR_CLASS)('\V')
+2 -2
View File
@@ -9,10 +9,10 @@ REGEXP_FILE
RegExpCharImpl: <a>
PsiElement(CHARACTER)('a')
RegExpCharImpl: <\ >
PsiElement(CHARACTER)('\ ')
PsiElement(ESC_CTRL_CHARACTER)('\ ')
RegExpCharImpl: <b>
PsiElement(CHARACTER)('b')
RegExpCharImpl: <\ >
PsiElement(CHARACTER)('\ ')
PsiElement(ESC_CTRL_CHARACTER)('\ ')
RegExpCharImpl: <c>
PsiElement(CHARACTER)('c')
+1 -1
View File
@@ -16,7 +16,7 @@ REGEXP_FILE
RegExpCharImpl: <,>
PsiElement(CHARACTER)(',')
RegExpCharImpl: < >
PsiElement(CHARACTER)(' ')
PsiElement(CTRL_CHARACTER)(' ')
RegExpGroupImpl: <(.*)>
PsiElement(GROUP_BEGIN)('(')
RegExpPatternImpl: <.*>
+2 -2
View File
@@ -8,11 +8,11 @@ REGEXP_FILE
RegExpCharImpl: <3>
PsiElement(CHARACTER)('3')
RegExpCharImpl: < >
PsiElement(CHARACTER)(' ')
PsiElement(CTRL_CHARACTER)(' ')
PsiElement(UNION)('|')
RegExpBranchImpl: < 456>
RegExpCharImpl: < >
PsiElement(CHARACTER)(' ')
PsiElement(CTRL_CHARACTER)(' ')
RegExpCharImpl: <4>
PsiElement(CHARACTER)('4')
RegExpCharImpl: <5>
+7 -7
View File
@@ -60,7 +60,7 @@ REGEXP_FILE
RegExpPatternImpl: < descr="((?:[^"\\]|\\")*)">
RegExpBranchImpl: < descr="((?:[^"\\]|\\")*)">
RegExpCharImpl: < >
PsiElement(CHARACTER)(' ')
PsiElement(CTRL_CHARACTER)(' ')
RegExpCharImpl: <d>
PsiElement(CHARACTER)('d')
RegExpCharImpl: <e>
@@ -114,7 +114,7 @@ REGEXP_FILE
RegExpPatternImpl: < type="([0-9A-Z_]+)">
RegExpBranchImpl: < type="([0-9A-Z_]+)">
RegExpCharImpl: < >
PsiElement(CHARACTER)(' ')
PsiElement(CTRL_CHARACTER)(' ')
RegExpCharImpl: <t>
PsiElement(CHARACTER)('t')
RegExpCharImpl: <y>
@@ -164,7 +164,7 @@ REGEXP_FILE
RegExpPatternImpl: < foreground="([0-9xa-f]+)">
RegExpBranchImpl: < foreground="([0-9xa-f]+)">
RegExpCharImpl: < >
PsiElement(CHARACTER)(' ')
PsiElement(CTRL_CHARACTER)(' ')
RegExpCharImpl: <f>
PsiElement(CHARACTER)('f')
RegExpCharImpl: <o>
@@ -226,7 +226,7 @@ REGEXP_FILE
RegExpPatternImpl: < background="([0-9xa-f]+)">
RegExpBranchImpl: < background="([0-9xa-f]+)">
RegExpCharImpl: < >
PsiElement(CHARACTER)(' ')
PsiElement(CTRL_CHARACTER)(' ')
RegExpCharImpl: <b>
PsiElement(CHARACTER)('b')
RegExpCharImpl: <a>
@@ -288,7 +288,7 @@ REGEXP_FILE
RegExpPatternImpl: < effectcolor="([0-9xa-f]+)">
RegExpBranchImpl: < effectcolor="([0-9xa-f]+)">
RegExpCharImpl: < >
PsiElement(CHARACTER)(' ')
PsiElement(CTRL_CHARACTER)(' ')
RegExpCharImpl: <e>
PsiElement(CHARACTER)('e')
RegExpCharImpl: <f>
@@ -352,7 +352,7 @@ REGEXP_FILE
RegExpPatternImpl: < effecttype="([A-Z]+)">
RegExpBranchImpl: < effecttype="([A-Z]+)">
RegExpCharImpl: < >
PsiElement(CHARACTER)(' ')
PsiElement(CTRL_CHARACTER)(' ')
RegExpCharImpl: <e>
PsiElement(CHARACTER)('e')
RegExpCharImpl: <f>
@@ -405,7 +405,7 @@ REGEXP_FILE
RegExpPatternImpl: < fonttype="([0-9]+)">
RegExpBranchImpl: < fonttype="([0-9]+)">
RegExpCharImpl: < >
PsiElement(CHARACTER)(' ')
PsiElement(CTRL_CHARACTER)(' ')
RegExpCharImpl: <f>
PsiElement(CHARACTER)('f')
RegExpCharImpl: <o>
+1 -1
View File
@@ -31,7 +31,7 @@ REGEXP_FILE
RegExpCharImpl: <9>
PsiElement(CHARACTER)('9')
RegExpCharImpl: < >
PsiElement(CHARACTER)(' ')
PsiElement(CTRL_CHARACTER)(' ')
RegExpCharRangeImpl: <a-z>
RegExpCharImpl: <a>
PsiElement(CHARACTER)('a')
+1 -1
View File
@@ -8,7 +8,7 @@ REGEXP_FILE
RegExpCharImpl: <d>
PsiElement(CHARACTER)('d')
RegExpCharImpl: < >
PsiElement(CHARACTER)(' ')
PsiElement(CTRL_CHARACTER)(' ')
RegExpClosureImpl: <[+-]?>
RegExpClassImpl: <[+-]>
PsiElement(CLASS_BEGIN)('[')
+3 -3
View File
@@ -18,7 +18,7 @@ REGEXP_FILE
RegExpCharImpl: <e>
PsiElement(CHARACTER)('e')
RegExpCharImpl: < >
PsiElement(CHARACTER)(' ')
PsiElement(CTRL_CHARACTER)(' ')
RegExpCharImpl: <w>
PsiElement(CHARACTER)('w')
RegExpCharImpl: <o>
@@ -30,13 +30,13 @@ REGEXP_FILE
RegExpCharImpl: <s>
PsiElement(CHARACTER)('s')
RegExpCharImpl: < >
PsiElement(CHARACTER)(' ')
PsiElement(CTRL_CHARACTER)(' ')
RegExpCharImpl: <o>
PsiElement(CHARACTER)('o')
RegExpCharImpl: <f>
PsiElement(CHARACTER)('f')
RegExpCharImpl: < >
PsiElement(CHARACTER)(' ')
PsiElement(CTRL_CHARACTER)(' ')
RegExpCharImpl: <t>
PsiElement(CHARACTER)('t')
RegExpCharImpl: <e>
+4 -4
View File
@@ -4,17 +4,17 @@ REGEXP_FILE
RegExpCharImpl: <i>
PsiElement(CHARACTER)('i')
RegExpCharImpl: < >
PsiElement(CHARACTER)(' ')
PsiElement(CTRL_CHARACTER)(' ')
RegExpCharImpl: <a>
PsiElement(CHARACTER)('a')
RegExpCharImpl: <m>
PsiElement(CHARACTER)('m')
RegExpCharImpl: < >
PsiElement(CHARACTER)(' ')
PsiElement(CTRL_CHARACTER)(' ')
RegExpCharImpl: <a>
PsiElement(CHARACTER)('a')
RegExpCharImpl: < >
PsiElement(CHARACTER)(' ')
PsiElement(CTRL_CHARACTER)(' ')
RegExpCharImpl: <g>
PsiElement(CHARACTER)('g')
RegExpCharImpl: <r>
@@ -26,7 +26,7 @@ REGEXP_FILE
RegExpCharImpl: <n>
PsiElement(CHARACTER)('n')
RegExpCharImpl: < >
PsiElement(CHARACTER)(' ')
PsiElement(CTRL_CHARACTER)(' ')
RegExpGroupImpl: <(giant|man|martian)>
PsiElement(GROUP_BEGIN)('(')
RegExpPatternImpl: <giant|man|martian>