public Expression slicing_expression()
{
Expression target = null;
IToken token = null;
IToken token2 = null;
SlicingExpression se = null;
MethodInvocationExpression expression3 = null;
ExpressionCollection ec = null;
try
{
target = this.atom();
while (true)
{
while ((this.LA(1) == 0x44) && tokenSet_54_.member(this.LA(2)))
{
token = this.LT(1);
this.match(0x44);
if (base.inputState.guessing == 0)
{
se = new SlicingExpression(ToLexicalInfo(token));
se.set_Target(target);
target = se;
}
this.slice(se);
while (this.LA(1) == 0x43)
{
this.match(0x43);
this.slice(se);
}
this.match(0x45);
}
if ((this.LA(1) == 0x41) && tokenSet_55_.member(this.LA(2)))
{
this.match(0x41);
target = this.member_reference_expression(target);
}
else
{
if ((this.LA(1) != 0x3f) || !tokenSet_22_.member(this.LA(2)))
{
return target;
}
token2 = this.LT(1);
this.match(0x3f);
if (base.inputState.guessing == 0)
{
expression3 = new MethodInvocationExpression(ToLexicalInfo(token2));
expression3.set_Target(target);
target = expression3;
ec = expression3.get_Arguments();
}
this.expression_list(ec);
this.match(0x40);
}
}
}
catch (RecognitionException exception)
{
if (base.inputState.guessing != 0)
{
throw;
}
this.reportError(exception);
this.recover(exception, tokenSet_20_);
return target;
}
return target;
}