in src/Lucene.Net.QueryParser/Classic/QueryParserTokenManager.cs [110:722]
private int JjMoveNfa_2(int startState, int curPos)
{
int startsAt = 0;
jjnewStateCnt = 49;
int i = 1;
jjstateSet[0] = startState;
int kind = 0x7fffffff;
for (; ; )
{
if (++jjround == 0x7fffffff)
ReInitRounds();
if (m_curChar < 64)
{
ulong l = (ulong) (1L << (int) m_curChar);
do
{
switch (jjstateSet[--i])
{
case 49:
case 33:
if ((0xfbff7cf8ffffd9ffL & l) == (ulong)0L)
break;
if (kind > 23)
kind = 23;
JjCheckNAddTwoStates(33, 34);
break;
case 0:
if ((0xfbff54f8ffffd9ffL & l) != (ulong)0L)
{
if (kind > 23)
kind = 23;
JjCheckNAddTwoStates(33, 34);
}
else if ((0x100002600L & l) != 0L)
{
if (kind > 7)
kind = 7;
}
else if ((0x280200000000L & l) != 0L)
jjstateSet[jjnewStateCnt++] = 15;
else if (m_curChar == 47)
JjCheckNAddStates(0, 2);
else if (m_curChar == 34)
JjCheckNAddStates(3, 5);
if ((0x7bff50f8ffffd9ffL & l) != 0L)
{
if (kind > 20)
kind = 20;
JjCheckNAddStates(6, 10);
}
else if (m_curChar == 42)
{
if (kind > 22)
kind = 22;
}
else if (m_curChar == 33)
{
if (kind > 10)
kind = 10;
}
if (m_curChar == 38)
jjstateSet[jjnewStateCnt++] = 4;
break;
case 4:
if (m_curChar == 38 && kind > 8)
kind = 8;
break;
case 5:
if (m_curChar == 38)
jjstateSet[jjnewStateCnt++] = 4;
break;
case 13:
if (m_curChar == 33 && kind > 10)
kind = 10;
break;
case 14:
if ((0x280200000000L & l) != 0L)
jjstateSet[jjnewStateCnt++] = 15;
break;
case 15:
if ((0x100002600L & l) != 0L && kind > 13)
kind = 13;
break;
case 16:
if (m_curChar == 34)
JjCheckNAddStates(3, 5);
break;
case 17:
if ((0xfffffffbffffffffL & l) != (ulong) 0L)
JjCheckNAddStates(3, 5);
break;
case 19:
JjCheckNAddStates(3, 5);
break;
case 20:
if (m_curChar == 34 && kind > 19)
kind = 19;
break;
case 22:
if ((0x3ff000000000000L & l) == 0L)
break;
if (kind > 21)
kind = 21;
JjCheckNAddStates(11, 14);
break;
case 23:
if (m_curChar == 46)
JjCheckNAdd(24);
break;
case 24:
if ((0x3ff000000000000L & l) == 0L)
break;
if (kind > 21)
kind = 21;
JjCheckNAddStates(15, 17);
break;
case 25:
if ((0x7bff78f8ffffd9ffL & l) == (ulong)0L)
break;
if (kind > 21)
kind = 21;
JjCheckNAddTwoStates(25, 26);
break;
case 27:
if (kind > 21)
kind = 21;
JjCheckNAddTwoStates(25, 26);
break;
case 28:
if ((0x7bff78f8ffffd9ffL & l) == 0L)
break;
if (kind > 21)
kind = 21;
JjCheckNAddTwoStates(28, 29);
break;
case 30:
if (kind > 21)
kind = 21;
JjCheckNAddTwoStates(28, 29);
break;
case 31:
if (m_curChar == 42 && kind > 22)
kind = 22;
break;
case 32:
if ((0xfbff54f8ffffd9ffL & l) == (ulong)0L)
break;
if (kind > 23)
kind = 23;
JjCheckNAddTwoStates(33, 34);
break;
case 35:
if (kind > 23)
kind = 23;
JjCheckNAddTwoStates(33, 34);
break;
case 36:
case 38:
if (m_curChar == 47)
JjCheckNAddStates(0, 2);
break;
case 37:
if ((0xffff7fffffffffffL & l) != (ulong)0L)
JjCheckNAddStates(0, 2);
break;
case 40:
if (m_curChar == 47 && kind > 24)
kind = 24;
break;
case 41:
if ((0x7bff50f8ffffd9ffL & l) == 0L)
break;
if (kind > 20)
kind = 20;
JjCheckNAddStates(6, 10);
break;
case 42:
if ((0x7bff78f8ffffd9ffL & l) == 0L)
break;
if (kind > 20)
kind = 20;
JjCheckNAddTwoStates(42, 43);
break;
case 44:
if (kind > 20)
kind = 20;
JjCheckNAddTwoStates(42, 43);
break;
case 45:
if ((0x7bff78f8ffffd9ffL & l) != 0L)
JjCheckNAddStates(18, 20);
break;
case 47:
JjCheckNAddStates(18, 20);
break;
default: break;
}
}
while (i != startsAt);
}
else if (m_curChar < 128)
{
// NOTE: This didn't change in Java from 3.0.1 to 4.8.0, but it is different in .NET.
// But changing it back made more tests pass, so I am working under the assumption 63
// is the correct value.
//ulong l = (ulong)(1L << (curChar & 077));
ulong l = (ulong) (1L << (m_curChar & 63));
do
{
switch (jjstateSet[--i])
{
case 49:
if ((0x97ffffff87ffffffL & l) != (ulong) 0L)
{
if (kind > 23)
kind = 23;
JjCheckNAddTwoStates(33, 34);
}
else if (m_curChar == 92)
JjCheckNAddTwoStates(35, 35);
break;
case 0:
if ((0x97ffffff87ffffffL & l) != (ulong) 0L)
{
if (kind > 20)
kind = 20;
JjCheckNAddStates(6, 10);
}
else if (m_curChar == 92)
JjCheckNAddStates(21, 23);
else if (m_curChar == 126)
{
if (kind > 21)
kind = 21;
JjCheckNAddStates(24, 26);
}
if ((0x97ffffff87ffffffL & l) != (ulong) 0L)
{
if (kind > 23)
kind = 23;
JjCheckNAddTwoStates(33, 34);
}
if (m_curChar == 78)
jjstateSet[jjnewStateCnt++] = 11;
else if (m_curChar == 124)
jjstateSet[jjnewStateCnt++] = 8;
else if (m_curChar == 79)
jjstateSet[jjnewStateCnt++] = 6;
else if (m_curChar == 65)
jjstateSet[jjnewStateCnt++] = 2;
break;
case 1:
if (m_curChar == 68 && kind > 8)
kind = 8;
break;
case 2:
if (m_curChar == 78)
jjstateSet[jjnewStateCnt++] = 1;
break;
case 3:
if (m_curChar == 65)
jjstateSet[jjnewStateCnt++] = 2;
break;
case 6:
if (m_curChar == 82 && kind > 9)
kind = 9;
break;
case 7:
if (m_curChar == 79)
jjstateSet[jjnewStateCnt++] = 6;
break;
case 8:
if (m_curChar == 124 && kind > 9)
kind = 9;
break;
case 9:
if (m_curChar == 124)
jjstateSet[jjnewStateCnt++] = 8;
break;
case 10:
if (m_curChar == 84 && kind > 10)
kind = 10;
break;
case 11:
if (m_curChar == 79)
jjstateSet[jjnewStateCnt++] = 10;
break;
case 12:
if (m_curChar == 78)
jjstateSet[jjnewStateCnt++] = 11;
break;
case 17:
if ((0xffffffffefffffffL & l) != (ulong) 0L)
JjCheckNAddStates(3, 5);
break;
case 18:
if (m_curChar == 92)
jjstateSet[jjnewStateCnt++] = 19;
break;
case 19:
JjCheckNAddStates(3, 5);
break;
case 21:
if (m_curChar != 126)
break;
if (kind > 21)
kind = 21;
JjCheckNAddStates(24, 26);
break;
case 25:
if ((0x97ffffff87ffffffL & l) == (ulong) 0L)
break;
if (kind > 21)
kind = 21;
JjCheckNAddTwoStates(25, 26);
break;
case 26:
if (m_curChar == 92)
JjAddStates(27, 28);
break;
case 27:
if (kind > 21)
kind = 21;
JjCheckNAddTwoStates(25, 26);
break;
case 28:
if ((0x97ffffff87ffffffL & l) == (ulong) 0L)
break;
if (kind > 21)
kind = 21;
JjCheckNAddTwoStates(28, 29);
break;
case 29:
if (m_curChar == 92)
JjAddStates(29, 30);
break;
case 30:
if (kind > 21)
kind = 21;
JjCheckNAddTwoStates(28, 29);
break;
case 32:
if ((0x97ffffff87ffffffL & l) == (ulong)0L)
break;
if (kind > 23)
kind = 23;
JjCheckNAddTwoStates(33, 34);
break;
case 33:
if ((0x97ffffff87ffffffL & l) == (ulong)0L)
break;
if (kind > 23)
kind = 23;
JjCheckNAddTwoStates(33, 34);
break;
case 34:
if (m_curChar == 92)
JjCheckNAddTwoStates(35, 35);
break;
case 35:
if (kind > 23)
kind = 23;
JjCheckNAddTwoStates(33, 34);
break;
case 37:
JjAddStates(0, 2);
break;
case 39:
if (m_curChar == 92)
jjstateSet[jjnewStateCnt++] = 38;
break;
case 41:
if ((0x97ffffff87ffffffL & l) == (ulong)0L)
break;
if (kind > 20)
kind = 20;
JjCheckNAddStates(6, 10);
break;
case 42:
if ((0x97ffffff87ffffffL & l) == (ulong)0L)
break;
if (kind > 20)
kind = 20;
JjCheckNAddTwoStates(42, 43);
break;
case 43:
if (m_curChar == 92)
JjCheckNAddTwoStates(44, 44);
break;
case 44:
if (kind > 20)
kind = 20;
JjCheckNAddTwoStates(42, 43);
break;
case 45:
if ((0x97ffffff87ffffffL & l) != (ulong)0L)
JjCheckNAddStates(18, 20);
break;
case 46:
if (m_curChar == 92)
JjCheckNAddTwoStates(47, 47);
break;
case 47:
JjCheckNAddStates(18, 20);
break;
case 48:
if (m_curChar == 92)
JjCheckNAddStates(21, 23);
break;
default: break;
}
}
while (i != startsAt);
}
else
{
int hiByte = (int) (m_curChar >> 8);
int i1 = hiByte >> 6;
ulong l1 = (ulong) (1L << (hiByte & 63));
int i2 = (m_curChar & 0xff) >> 6;
ulong l2 = (ulong) (1L << (m_curChar & 63));
do
{
switch (jjstateSet[--i])
{
case 49:
case 33:
if (!JjCanMove_2(hiByte, i1, i2, l1, l2))
break;
if (kind > 23)
kind = 23;
JjCheckNAddTwoStates(33, 34);
break;
case 0:
if (JjCanMove_0(hiByte, i1, i2, l1, l2))
{
if (kind > 7)
kind = 7;
}
if (JjCanMove_2(hiByte, i1, i2, l1, l2))
{
if (kind > 23)
kind = 23;
JjCheckNAddTwoStates(33, 34);
}
if (JjCanMove_2(hiByte, i1, i2, l1, l2))
{
if (kind > 20)
kind = 20;
JjCheckNAddStates(6, 10);
}
break;
case 15:
if (JjCanMove_0(hiByte, i1, i2, l1, l2) && kind > 13)
kind = 13;
break;
case 17:
case 19:
if (JjCanMove_1(hiByte, i1, i2, l1, l2))
JjCheckNAddStates(3, 5);
break;
case 25:
if (!JjCanMove_2(hiByte, i1, i2, l1, l2))
break;
if (kind > 21)
kind = 21;
JjCheckNAddTwoStates(25, 26);
break;
case 27:
if (!JjCanMove_1(hiByte, i1, i2, l1, l2))
break;
if (kind > 21)
kind = 21;
JjCheckNAddTwoStates(25, 26);
break;
case 28:
if (!JjCanMove_2(hiByte, i1, i2, l1, l2))
break;
if (kind > 21)
kind = 21;
JjCheckNAddTwoStates(28, 29);
break;
case 30:
if (!JjCanMove_1(hiByte, i1, i2, l1, l2))
break;
if (kind > 21)
kind = 21;
JjCheckNAddTwoStates(28, 29);
break;
case 32:
if (!JjCanMove_2(hiByte, i1, i2, l1, l2))
break;
if (kind > 23)
kind = 23;
JjCheckNAddTwoStates(33, 34);
break;
case 35:
if (!JjCanMove_1(hiByte, i1, i2, l1, l2))
break;
if (kind > 23)
kind = 23;
JjCheckNAddTwoStates(33, 34);
break;
case 37:
if (JjCanMove_1(hiByte, i1, i2, l1, l2))
JjAddStates(0, 2);
break;
case 41:
if (!JjCanMove_2(hiByte, i1, i2, l1, l2))
break;
if (kind > 20)
kind = 20;
JjCheckNAddStates(6, 10);
break;
case 42:
if (!JjCanMove_2(hiByte, i1, i2, l1, l2))
break;
if (kind > 20)
kind = 20;
JjCheckNAddTwoStates(42, 43);
break;
case 44:
if (!JjCanMove_1(hiByte, i1, i2, l1, l2))
break;
if (kind > 20)
kind = 20;
JjCheckNAddTwoStates(42, 43);
break;
case 45:
if (JjCanMove_2(hiByte, i1, i2, l1, l2))
JjCheckNAddStates(18, 20);
break;
case 47:
if (JjCanMove_1(hiByte, i1, i2, l1, l2))
JjCheckNAddStates(18, 20);
break;
default: break;
}
}
while (i != startsAt);
}
if (kind != 0x7fffffff)
{
jjmatchedKind = kind;
jjmatchedPos = curPos;
kind = 0x7fffffff;
}
++curPos;
if ((i = jjnewStateCnt) == (startsAt = 49 - (jjnewStateCnt = startsAt)))
return curPos;
try
{
m_curChar = m_input_stream.ReadChar();
}
catch (Exception e) when (e.IsIOException())
{
return curPos;
}
}
}