blob: 7ea9cc711eb6b95f6e633f6e9be285727c65f577 [file] [log] [blame]
using Lucene.Net.Support.IO;
using System;
using System.Diagnostics.CodeAnalysis;
using System.IO;
namespace Lucene.Net.QueryParsers.Classic
{
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/// <summary>Token Manager. </summary>
public class QueryParserTokenManager //: QueryParserConstants
{
private void InitBlock()
{
StreamWriter temp_writer;
temp_writer = new StreamWriter(Console.OpenStandardOutput(), Console.Out.Encoding);
temp_writer.AutoFlush = true;
debugStream = temp_writer;
}
/// <summary>Debug output. </summary>
private TextWriter debugStream; // LUCENENET specific - made private, since we already have a setter
/// <summary>Set debug output. </summary>
public virtual void SetDebugStream(TextWriter ds)
{
debugStream = new SafeTextWriterWrapper(ds);
}
private int JjStopStringLiteralDfa_2(int pos, long active0)
{
switch (pos)
{
default:
return - 1;
}
}
private int JjStartNfa_2(int pos, long active0)
{
return JjMoveNfa_2(JjStopStringLiteralDfa_2(pos, active0), pos + 1);
}
private int JjStopAtPos(int pos, int kind)
{
jjmatchedKind = kind;
jjmatchedPos = pos;
return pos + 1;
}
private int JjMoveStringLiteralDfa0_2()
{
switch (m_curChar)
{
case (char) (40):
return JjStopAtPos(0, 14);
case (char) (41):
return JjStopAtPos(0, 15);
case (char) (42):
return JjStartNfaWithStates_2(0, 17, 49);
case (char) (43):
return JjStartNfaWithStates_2(0, 11, 15);
case (char) (45):
return JjStartNfaWithStates_2(0, 12, 15);
case (char) (58):
return JjStopAtPos(0, 16);
case (char) (91):
return JjStopAtPos(0, 25);
case (char) (94):
return JjStopAtPos(0, 18);
case (char) (123):
return JjStopAtPos(0, 26);
default:
return JjMoveNfa_2(0, 0);
}
}
private int JjStartNfaWithStates_2(int pos, int kind, int state)
{
jjmatchedKind = kind;
jjmatchedPos = pos;
try
{
m_curChar = m_input_stream.ReadChar();
}
catch (IOException)
{
return pos + 1;
}
return JjMoveNfa_2(state, pos + 1);
}
internal static readonly ulong[] jjbitVec0 = new ulong[]{0x1L, 0x0L, 0x0L, 0x0L};
internal static readonly ulong[] jjbitVec1 = new ulong[]{0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL};
internal static readonly ulong[] jjbitVec3 = new ulong[]{0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL};
internal static readonly ulong[] jjbitVec4 = new ulong[]{0xfffefffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL};
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 (IOException)
{
return curPos;
}
}
}
private int JjMoveStringLiteralDfa0_0()
{
return JjMoveNfa_0(0, 0);
}
private int JjMoveNfa_0(int startState, int curPos)
{
int startsAt = 0;
jjnewStateCnt = 3;
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 0:
if ((0x3ff000000000000L & l) == 0L)
break;
if (kind > 27)
kind = 27;
JjAddStates(31, 32);
break;
case 1:
if (m_curChar == 46)
JjCheckNAdd(2);
break;
case 2:
if ((0x3ff000000000000L & l) == 0L)
break;
if (kind > 27)
kind = 27;
JjCheckNAdd(2);
break;
default: break;
}
}
while (i != startsAt);
}
else if (m_curChar < 128)
{
ulong l = (ulong) (1L << (m_curChar & 63));
do
{
switch (jjstateSet[--i])
{
default: break;
}
}
while (i != startsAt);
}
else
{
int hiByte = (int) (m_curChar >> 8);
int i1 = hiByte >> 6;
long l1 = 1L << (hiByte & 63);
int i2 = (m_curChar & 0xff) >> 6;
long l2 = 1L << (m_curChar & 63);
do
{
switch (jjstateSet[--i])
{
default: break;
}
}
while (i != startsAt);
}
if (kind != 0x7fffffff)
{
jjmatchedKind = kind;
jjmatchedPos = curPos;
kind = 0x7fffffff;
}
++curPos;
if ((i = jjnewStateCnt) == (startsAt = 3 - (jjnewStateCnt = startsAt)))
return curPos;
try
{
m_curChar = m_input_stream.ReadChar();
}
catch (IOException)
{
return curPos;
}
}
}
private int JjStopStringLiteralDfa_1(int pos, long active0)
{
switch (pos)
{
case 0:
if ((active0 & 0x10000000L) != 0L)
{
jjmatchedKind = 32;
return 6;
}
return - 1;
default:
return - 1;
}
}
private int JjStartNfa_1(int pos, long active0)
{
return JjMoveNfa_1(JjStopStringLiteralDfa_1(pos, active0), pos + 1);
}
private int JjMoveStringLiteralDfa0_1()
{
switch (m_curChar)
{
case (char)84:
return JjMoveStringLiteralDfa1_1(0x10000000L);
case (char)93:
return JjStopAtPos(0, 29);
case (char)125:
return JjStopAtPos(0, 30);
default:
return JjMoveNfa_1(0, 0);
}
}
private int JjMoveStringLiteralDfa1_1(long active0)
{
try
{
m_curChar = m_input_stream.ReadChar();
}
catch (IOException)
{
JjStopStringLiteralDfa_1(0, active0);
return 1;
}
switch (m_curChar)
{
case (char) (79):
if ((active0 & 0x10000000L) != 0L)
return JjStartNfaWithStates_1(1, 28, 6);
break;
default:
break;
}
return JjStartNfa_1(0, active0);
}
private int JjStartNfaWithStates_1(int pos, int kind, int state)
{
jjmatchedKind = kind;
jjmatchedPos = pos;
try
{
m_curChar = m_input_stream.ReadChar();
}
catch (IOException)
{
return pos + 1;
}
return JjMoveNfa_1(state, pos + 1);
}
private int JjMoveNfa_1(int startState, int curPos)
{
int startsAt = 0;
jjnewStateCnt = 7;
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 0:
if ((0xfffffffeffffffffL & l) != (ulong)0L)
{
if (kind > 32)
kind = 32;
JjCheckNAdd(6);
}
if ((0x100002600L & l) != 0L)
{
if (kind > 7)
kind = 7;
}
else if (m_curChar == 34)
JjCheckNAddTwoStates(2, 4);
break;
case 1:
if (m_curChar == 34)
JjCheckNAddTwoStates(2, 4);
break;
case 2:
if ((0xfffffffbffffffffL & l) != (ulong)0L)
JjCheckNAddStates(33, 35);
break;
case 3:
if (m_curChar == 34)
JjCheckNAddStates(33, 35);
break;
case 5:
if (m_curChar == 34 && kind > 31)
kind = 31;
break;
case 6:
if ((0xfffffffeffffffffL & l) == (ulong)0L)
break;
if (kind > 32)
kind = 32;
JjCheckNAdd(6);
break;
default: break;
}
}
while (i != startsAt);
}
else if (m_curChar < 128)
{
ulong l = (ulong) (1L << (m_curChar & 63));
do
{
switch (jjstateSet[--i])
{
case 0:
case 6:
if ((0xdfffffffdfffffffL & l) == (ulong)0L)
break;
if (kind > 32)
kind = 32;
JjCheckNAdd(6);
break;
case 2:
JjAddStates(33, 35);
break;
case 4:
if (m_curChar == 92)
jjstateSet[jjnewStateCnt++] = 3;
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 0:
if (JjCanMove_0(hiByte, i1, i2, l1, l2))
{
if (kind > 7)
kind = 7;
}
if (JjCanMove_1(hiByte, i1, i2, l1, l2))
{
if (kind > 32)
kind = 32;
JjCheckNAdd(6);
}
break;
case 2:
if (JjCanMove_1(hiByte, i1, i2, l1, l2))
JjAddStates(33, 35);
break;
case 6:
if (!JjCanMove_1(hiByte, i1, i2, l1, l2))
break;
if (kind > 32)
kind = 32;
JjCheckNAdd(6);
break;
default: break;
}
}
while (i != startsAt);
}
if (kind != 0x7fffffff)
{
jjmatchedKind = kind;
jjmatchedPos = curPos;
kind = 0x7fffffff;
}
++curPos;
if ((i = jjnewStateCnt) == (startsAt = 7 - (jjnewStateCnt = startsAt)))
return curPos;
try
{
m_curChar = m_input_stream.ReadChar();
}
catch (IOException)
{
return curPos;
}
}
}
internal static readonly int[] jjnextStates = new int[]{
37, 39, 40, 17, 18, 20, 42, 45, 31, 46, 43, 22, 23, 25, 26, 24,
25, 26, 45, 31, 46, 44, 47, 35, 22, 28, 29, 27, 27, 30, 30, 0,
1, 2, 4, 5
};
private static bool JjCanMove_0(int hiByte, int i1, int i2, ulong l1, ulong l2)
{
switch (hiByte)
{
case 48:
return ((jjbitVec0[i2] & l2) != (ulong) 0L);
default:
return false;
}
}
private static bool JjCanMove_1(int hiByte, int i1, int i2, ulong l1, ulong l2)
{
switch (hiByte)
{
case 0:
return ((jjbitVec3[i2] & l2) != (ulong) 0L);
default:
if ((jjbitVec1[i1] & l1) != (ulong) 0L)
return true;
return false;
}
}
private static bool JjCanMove_2(int hiByte, int i1, int i2, ulong l1, ulong l2)
{
switch (hiByte)
{
case 0:
return ((jjbitVec3[i2] & l2) != (ulong) 0L);
case 48:
return ((jjbitVec1[i2] & l2) != (ulong) 0L);
default:
if ((jjbitVec4[i1] & l1) != (ulong) 0L)
return true;
return false;
}
}
///// <summary>Token literal values. </summary>
//public static readonly string[] jjstrLiteralImages = new string[] {
// "", null, null, null, null, null, null, null, null, null, null, "\x002B", "\x002D",
// "\x0028", "\x0029", "\x003A", "\x002A", "\x005E", null, null, null, null, null, "\x005B", "\x007B",
// null, "\x0054\x004F", "\x005D", null, null, "\x0054\x004F", "\x007D", null, null };
/// <summary>Token literal values. </summary>
public static readonly string[] jjstrLiteralImages = new string[]{
"", null, null, null, null, null, null, null, null, null, null, "\x002B", "\x002D",
null, "\x0028", "\x0029", "\x003A", "\x002A", "\x005E", null, null, null, null, null, null,
"\x005B", "\x007B", null, "\x0054\x004F", "\x005D", "\x007D", null, null };
/// <summary>Lexer state names. </summary>
public static readonly string[] lexStateNames = new string[] {
"Boost",
"Range",
"DEFAULT"
};
/// <summary>Lex State array. </summary>
public static readonly int[] jjnewLexState = new int[] {
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1,
1, 1, 2, -1, 2, 2, -1, -1
};
internal static readonly ulong[] jjtoToken = new ulong[] { 0x1ffffff01L };
internal static readonly long[] jjtoSkip = new long[] { 0x80L };
protected ICharStream m_input_stream;
private uint[] jjrounds = new uint[49];
private int[] jjstateSet = new int[98];
protected char m_curChar;
/// <summary>Constructor. </summary>
public QueryParserTokenManager(ICharStream stream)
{
InitBlock();
m_input_stream = stream;
}
/// <summary>Constructor. </summary>
public QueryParserTokenManager(ICharStream stream, int lexState):this(stream)
{
SwitchTo(lexState);
}
/// <summary>Reinitialise parser. </summary>
public virtual void ReInit(ICharStream stream)
{
jjmatchedPos = jjnewStateCnt = 0;
curLexState = defaultLexState;
m_input_stream = stream;
ReInitRounds();
}
private void ReInitRounds()
{
int i;
jjround = 0x80000001;
for (i = 49; i-- > 0; )
jjrounds[i] = 0x80000000;
}
/// <summary>Reinitialise parser. </summary>
public virtual void ReInit(ICharStream stream, int lexState)
{
ReInit(stream);
SwitchTo(lexState);
}
/// <summary>Switch to specified lex state. </summary>
public virtual void SwitchTo(int lexState)
{
if (lexState >= 3 || lexState < 0)
throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE);
else
curLexState = lexState;
}
protected internal virtual Token JjFillToken()
{
Token t;
string curTokenImage;
int beginLine;
int endLine;
int beginColumn;
int endColumn;
string im = jjstrLiteralImages[jjmatchedKind];
curTokenImage = (im == null)?m_input_stream.Image:im;
beginLine = m_input_stream.BeginLine;
beginColumn = m_input_stream.BeginColumn;
endLine = m_input_stream.EndLine;
endColumn = m_input_stream.EndColumn;
t = Token.NewToken(jjmatchedKind, curTokenImage);
t.BeginLine = beginLine;
t.EndLine = endLine;
t.BeginColumn = beginColumn;
t.EndColumn = endColumn;
return t;
}
internal int curLexState = 2;
internal int defaultLexState = 2;
internal int jjnewStateCnt;
internal uint jjround;
internal int jjmatchedPos;
internal int jjmatchedKind;
/// <summary>Get the next Token. </summary>
[SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")]
public virtual Token GetNextToken()
{
Token matchedToken;
int curPos = 0;
for (; ; )
{
try
{
m_curChar = m_input_stream.BeginToken();
}
catch (IOException)
{
jjmatchedKind = 0;
matchedToken = JjFillToken();
return matchedToken;
}
switch (curLexState)
{
case 0:
jjmatchedKind = 0x7fffffff;
jjmatchedPos = 0;
curPos = JjMoveStringLiteralDfa0_0();
break;
case 1:
jjmatchedKind = 0x7fffffff;
jjmatchedPos = 0;
curPos = JjMoveStringLiteralDfa0_1();
break;
case 2:
jjmatchedKind = 0x7fffffff;
jjmatchedPos = 0;
curPos = JjMoveStringLiteralDfa0_2();
break;
}
if (jjmatchedKind != 0x7fffffff)
{
if (jjmatchedPos + 1 < curPos)
m_input_stream.BackUp(curPos - jjmatchedPos - 1);
if ((jjtoToken[jjmatchedKind >> 6] & ((ulong) 1L << (jjmatchedKind & 63))) != (ulong) 0L)
{
matchedToken = JjFillToken();
if (jjnewLexState[jjmatchedKind] != - 1)
curLexState = jjnewLexState[jjmatchedKind];
return matchedToken;
}
else
{
if (jjnewLexState[jjmatchedKind] != - 1)
curLexState = jjnewLexState[jjmatchedKind];
goto EOFLoop;
}
}
int error_line = m_input_stream.EndLine;
int error_column = m_input_stream.EndColumn;
string error_after = null;
bool EOFSeen = false;
try
{
m_input_stream.ReadChar(); m_input_stream.BackUp(1);
}
catch (IOException)
{
EOFSeen = true;
error_after = curPos <= 1?"":m_input_stream.Image;
if (m_curChar == '\n' || m_curChar == '\r')
{
error_line++;
error_column = 0;
}
else
error_column++;
}
if (!EOFSeen)
{
m_input_stream.BackUp(1);
error_after = curPos <= 1?"":m_input_stream.Image;
}
throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, m_curChar, TokenMgrError.LEXICAL_ERROR);
EOFLoop: ;
}
}
private void JjCheckNAdd(int state)
{
if (jjrounds[state] != jjround)
{
jjstateSet[jjnewStateCnt++] = state;
jjrounds[state] = jjround;
}
}
private void JjAddStates(int start, int end)
{
do
{
jjstateSet[jjnewStateCnt++] = jjnextStates[start];
}
while (start++ != end);
}
private void JjCheckNAddTwoStates(int state1, int state2)
{
JjCheckNAdd(state1);
JjCheckNAdd(state2);
}
private void JjCheckNAddStates(int start, int end)
{
do
{
JjCheckNAdd(jjnextStates[start]);
}
while (start++ != end);
}
}
}