in src/Lucene.Net.QueryParser/Flexible/Standard/Parser/StandardSyntaxParser.cs [346:564]
public IQueryNode Clause(string field)
{
IQueryNode q;
Token fieldToken = null, boost = null, @operator = null, term = null;
FieldQueryNode qLower, qUpper;
bool lowerInclusive, upperInclusive;
bool group = false;
if (Jj_2_2(3))
{
fieldToken = Jj_consume_token(RegexpToken.TERM);
switch ((jj_ntk == -1) ? Jj_ntk() : jj_ntk)
{
case RegexpToken.OP_COLON:
case RegexpToken.OP_EQUAL:
switch ((jj_ntk == -1) ? Jj_ntk() : jj_ntk)
{
case RegexpToken.OP_COLON:
Jj_consume_token(RegexpToken.OP_COLON);
break;
case RegexpToken.OP_EQUAL:
Jj_consume_token(RegexpToken.OP_EQUAL);
break;
default:
jj_la1[7] = jj_gen;
Jj_consume_token(-1);
throw new ParseException();
}
field = EscapeQuerySyntax.DiscardEscapeChar(fieldToken.Image).ToString();
q = Term(field);
break;
case RegexpToken.OP_LESSTHAN:
case RegexpToken.OP_LESSTHANEQ:
case RegexpToken.OP_MORETHAN:
case RegexpToken.OP_MORETHANEQ:
switch ((jj_ntk == -1) ? Jj_ntk() : jj_ntk)
{
case RegexpToken.OP_LESSTHAN:
@operator = Jj_consume_token(RegexpToken.OP_LESSTHAN);
break;
case RegexpToken.OP_LESSTHANEQ:
@operator = Jj_consume_token(RegexpToken.OP_LESSTHANEQ);
break;
case RegexpToken.OP_MORETHAN:
@operator = Jj_consume_token(RegexpToken.OP_MORETHAN);
break;
case RegexpToken.OP_MORETHANEQ:
@operator = Jj_consume_token(RegexpToken.OP_MORETHANEQ);
break;
default:
jj_la1[8] = jj_gen;
Jj_consume_token(-1);
throw new ParseException();
}
field = EscapeQuerySyntax.DiscardEscapeChar(fieldToken.Image).ToString();
switch ((jj_ntk == -1) ? Jj_ntk() : jj_ntk)
{
case RegexpToken.TERM:
term = Jj_consume_token(RegexpToken.TERM);
break;
case RegexpToken.QUOTED:
term = Jj_consume_token(RegexpToken.QUOTED);
break;
case RegexpToken.NUMBER:
term = Jj_consume_token(RegexpToken.NUMBER);
break;
default:
jj_la1[9] = jj_gen;
Jj_consume_token(-1);
throw new ParseException();
}
if (term.Kind == RegexpToken.QUOTED)
{
term.Image = term.Image.Substring(1, (term.Image.Length - 1) - 1);
}
switch (@operator.Kind)
{
case RegexpToken.OP_LESSTHAN:
lowerInclusive = true;
upperInclusive = false;
qLower = new FieldQueryNode(field,
"*", term.BeginColumn, term.EndColumn);
qUpper = new FieldQueryNode(field,
EscapeQuerySyntax.DiscardEscapeChar(term.Image), term.BeginColumn, term.EndColumn);
break;
case RegexpToken.OP_LESSTHANEQ:
lowerInclusive = true;
upperInclusive = true;
qLower = new FieldQueryNode(field,
"*", term.BeginColumn, term.EndColumn);
qUpper = new FieldQueryNode(field,
EscapeQuerySyntax.DiscardEscapeChar(term.Image), term.BeginColumn, term.EndColumn);
break;
case RegexpToken.OP_MORETHAN:
lowerInclusive = false;
upperInclusive = true;
qLower = new FieldQueryNode(field,
EscapeQuerySyntax.DiscardEscapeChar(term.Image), term.BeginColumn, term.EndColumn);
qUpper = new FieldQueryNode(field,
"*", term.BeginColumn, term.EndColumn);
break;
case RegexpToken.OP_MORETHANEQ:
lowerInclusive = true;
upperInclusive = true;
qLower = new FieldQueryNode(field,
EscapeQuerySyntax.DiscardEscapeChar(term.Image), term.BeginColumn, term.EndColumn);
qUpper = new FieldQueryNode(field,
"*", term.BeginColumn, term.EndColumn);
break;
default:
{ if (true) throw Error.Create("Unhandled case: operator=" + @operator.ToString()); }
}
q = new TermRangeQueryNode(qLower, qUpper, lowerInclusive, upperInclusive);
break;
default:
jj_la1[10] = jj_gen;
Jj_consume_token(-1);
throw new ParseException();
}
}
else
{
switch ((jj_ntk == -1) ? Jj_ntk() : jj_ntk)
{
case RegexpToken.LPAREN:
case RegexpToken.QUOTED:
case RegexpToken.TERM:
case RegexpToken.REGEXPTERM:
case RegexpToken.RANGEIN_START:
case RegexpToken.RANGEEX_START:
case RegexpToken.NUMBER:
if (Jj_2_1(2))
{
fieldToken = Jj_consume_token(RegexpToken.TERM);
switch ((jj_ntk == -1) ? Jj_ntk() : jj_ntk)
{
case RegexpToken.OP_COLON:
Jj_consume_token(RegexpToken.OP_COLON);
break;
case RegexpToken.OP_EQUAL:
Jj_consume_token(RegexpToken.OP_EQUAL);
break;
default:
jj_la1[11] = jj_gen;
Jj_consume_token(-1);
throw new ParseException();
}
field = EscapeQuerySyntax.DiscardEscapeChar(fieldToken.Image).ToString();
}
else
{
/* LUCENENET: intentionally blank */
}
switch ((jj_ntk == -1) ? Jj_ntk() : jj_ntk)
{
case RegexpToken.QUOTED:
case RegexpToken.TERM:
case RegexpToken.REGEXPTERM:
case RegexpToken.RANGEIN_START:
case RegexpToken.RANGEEX_START:
case RegexpToken.NUMBER:
q = Term(field);
break;
case RegexpToken.LPAREN:
Jj_consume_token(RegexpToken.LPAREN);
q = Query(field);
Jj_consume_token(RegexpToken.RPAREN);
switch ((jj_ntk == -1) ? Jj_ntk() : jj_ntk)
{
case RegexpToken.CARAT:
Jj_consume_token(RegexpToken.CARAT);
boost = Jj_consume_token(RegexpToken.NUMBER);
break;
default:
jj_la1[12] = jj_gen;
break;
}
group = true;
break;
default:
jj_la1[13] = jj_gen;
Jj_consume_token(-1);
throw new ParseException();
}
break;
default:
jj_la1[14] = jj_gen;
Jj_consume_token(-1);
throw new ParseException();
}
}
if (boost != null)
{
// LUCENENET specific - parse without throwing exceptions
float f = float.TryParse(boost.Image, NumberStyles.Float, CultureInfo.InvariantCulture, out float temp) ? temp : 1.0f;
try
{
// avoid boosting null queries, such as those caused by stop words
if (q != null)
{
q = new BoostQueryNode(q, f);
}
}
catch (Exception ignored) when (ignored.IsException())
{
/* Should this be handled somehow? (defaults to "no boost", if
* boost number is invalid)
*/
}
}
if (group) { q = new GroupQueryNode(q); }
{ if (true) return q; }
throw Error.Create("Missing return statement in function");
}