protected Expression slicing_expression()
{
Expression e;
IToken lbrack = null;
IToken oft = null;
IToken begin = null;
IToken lparen = null;
e = null;
SlicingExpression se = null;
MethodInvocationExpression mce = null;
IToken memberName = null;
TypeReference genericArgument = null;
TypeReferenceCollection genericArguments = null;
Expression nameSplice = null;
Expression initializer = null;
UnaryExpression ue = null;
try { // for error handling
e=safe_atom();
{ // ( ... )*
for (;;)
{
if ((LA(1)==LBRACK) && (tokenSet_70_.member(LA(2))))
{
{
lbrack = LT(1);
match(LBRACK);
{
switch ( LA(1) )
{
case OF:
{
{
match(OF);
if (0==inputState.guessing)
{
GenericReferenceExpression gre = new GenericReferenceExpression(ToLexicalInfo(lbrack));
gre.Target = e;
e = gre;
genericArguments = gre.GenericArguments;
}
type_reference_list(genericArguments);
}
break;
}
case ESEPARATOR:
case CAST:
case CHAR:
case FALSE:
case NOT:
case NULL:
case SELF:
case SUPER:
case THEN:
case TRUE:
case TYPEOF:
case TRIPLE_QUOTED_STRING:
case LPAREN:
case DOUBLE_QUOTED_STRING:
case SINGLE_QUOTED_STRING:
case ID:
case MULTIPLY:
case LBRACK:
case SPLICE_BEGIN:
case DOT:
case COLON:
case LBRACE:
case QQ_BEGIN:
case SUBTRACT:
case LONG:
case INCREMENT:
case DECREMENT:
case ONES_COMPLEMENT:
case INT:
case BACKTICK_QUOTED_STRING:
case RE_LITERAL:
case DOUBLE:
case FLOAT:
case TIMESPAN:
{
if (0==inputState.guessing)
{
se = new SlicingExpression(ToLexicalInfo(lbrack));
se.Target = e;
e = se;
}
slice(se);
{ // ( ... )*
for (;;)
{
if ((LA(1)==COMMA))
{
match(COMMA);
slice(se);
}
else
{
goto _loop589_breakloop;
}
}
_loop589_breakloop: ;
} // ( ... )*
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
match(RBRACK);
{
switch ( LA(1) )
{
case NULLABLE_SUFFIX:
{
match(NULLABLE_SUFFIX);
if (0==inputState.guessing)
{
ue = new UnaryExpression(e.LexicalInfo);
ue.Operator = UnaryOperatorType.SafeAccess;
ue.Operand = e;
e = ue;
}
break;
}
case EOF:
case DEDENT:
case ESEPARATOR:
case EOL:
case ASSEMBLY_ATTRIBUTE_BEGIN:
case MODULE_ATTRIBUTE_BEGIN:
case ABSTRACT:
case AND:
case AS:
case BREAK:
case CONTINUE:
case CALLABLE:
case CAST:
case CHAR:
case CLASS:
case DEF:
case DO:
case ELSE:
case ENUM:
case EVENT:
case FINAL:
case FOR:
case FALSE:
case GOTO:
case INTERFACE:
case INTERNAL:
case IS:
case ISA:
case IF:
case IN:
case NEW:
case NOT:
case NULL:
case OF:
case OR:
case OVERRIDE:
case PARTIAL:
case PUBLIC:
case PROTECTED:
case PRIVATE:
case RAISE:
case RETURN:
case SELF:
case SUPER:
case STATIC:
case STRUCT:
case THEN:
case TRY:
case TRANSIENT:
case TRUE:
case TYPEOF:
case UNLESS:
case VIRTUAL:
case WHILE:
case YIELD:
case TRIPLE_QUOTED_STRING:
case EOS:
case LPAREN:
case RPAREN:
case DOUBLE_QUOTED_STRING:
case SINGLE_QUOTED_STRING:
case ID:
case MULTIPLY:
case LBRACK:
case RBRACK:
case ASSIGN:
case COMMA:
case SPLICE_BEGIN:
case DOT:
case COLON:
case EXPONENTIATION:
case BITWISE_OR:
case LBRACE:
case RBRACE:
case QQ_BEGIN:
case QQ_END:
case INPLACE_BITWISE_OR:
case INPLACE_EXCLUSIVE_OR:
case INPLACE_BITWISE_AND:
case INPLACE_SHIFT_LEFT:
case INPLACE_SHIFT_RIGHT:
case CMP_OPERATOR:
case GREATER_THAN:
case LESS_THAN:
case ADD:
case SUBTRACT:
case EXCLUSIVE_OR:
case DIVISION:
case MODULUS:
case BITWISE_AND:
case SHIFT_LEFT:
case SHIFT_RIGHT:
case LONG:
case INCREMENT:
case DECREMENT:
case ONES_COMPLEMENT:
case INT:
case BACKTICK_QUOTED_STRING:
case RE_LITERAL:
case DOUBLE:
case FLOAT:
case TIMESPAN:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
}
}
else if ((LA(1)==OF)) {
{
oft = LT(1);
match(OF);
genericArgument=type_reference();
if (0==inputState.guessing)
{
GenericReferenceExpression gre = new GenericReferenceExpression(ToLexicalInfo(oft));
gre.Target = e;
e = gre;
gre.GenericArguments.Add(genericArgument);
}
}
}
else if ((LA(1)==DOT) && (tokenSet_33_.member(LA(2)))) {
{
match(DOT);
{
switch ( LA(1) )
{
case EVENT:
case GET:
case INTERNAL:
case PUBLIC:
case PROTECTED:
case REF:
case SET:
case YIELD:
case ID:
{
{
memberName=member();
if (0==inputState.guessing)
{
e = MemberReferenceForToken(e, memberName);
}
}
break;
}
case SPLICE_BEGIN:
{
{
begin = LT(1);
match(SPLICE_BEGIN);
nameSplice=atom();
if (0==inputState.guessing)
{
e = new SpliceMemberReferenceExpression(
ToLexicalInfo(begin),
e,
nameSplice);
}
}
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
{
switch ( LA(1) )
{
case NULLABLE_SUFFIX:
{
match(NULLABLE_SUFFIX);
if (0==inputState.guessing)
{
ue = new UnaryExpression(e.LexicalInfo);
ue.Operator = UnaryOperatorType.SafeAccess;
ue.Operand = e;
e = ue;
}
break;
}
case EOF:
case DEDENT:
case ESEPARATOR:
case EOL:
case ASSEMBLY_ATTRIBUTE_BEGIN:
case MODULE_ATTRIBUTE_BEGIN:
case ABSTRACT:
case AND:
case AS:
case BREAK:
case CONTINUE:
case CALLABLE:
case CAST:
case CHAR:
case CLASS:
case DEF:
case DO:
case ELSE:
case ENUM:
case EVENT:
case FINAL:
case FOR:
case FALSE:
case GOTO:
case INTERFACE:
case INTERNAL:
case IS:
case ISA:
case IF:
case IN:
case NEW:
case NOT:
case NULL:
case OF:
case OR:
case OVERRIDE:
case PARTIAL:
case PUBLIC:
case PROTECTED:
case PRIVATE:
case RAISE:
case RETURN:
case SELF:
case SUPER:
case STATIC:
case STRUCT:
case THEN:
case TRY:
case TRANSIENT:
case TRUE:
case TYPEOF:
case UNLESS:
case VIRTUAL:
case WHILE:
case YIELD:
case TRIPLE_QUOTED_STRING:
case EOS:
case LPAREN:
case RPAREN:
case DOUBLE_QUOTED_STRING:
case SINGLE_QUOTED_STRING:
case ID:
case MULTIPLY:
case LBRACK:
case RBRACK:
case ASSIGN:
case COMMA:
case SPLICE_BEGIN:
case DOT:
case COLON:
case EXPONENTIATION:
case BITWISE_OR:
case LBRACE:
case RBRACE:
case QQ_BEGIN:
case QQ_END:
case INPLACE_BITWISE_OR:
case INPLACE_EXCLUSIVE_OR:
case INPLACE_BITWISE_AND:
case INPLACE_SHIFT_LEFT:
case INPLACE_SHIFT_RIGHT:
case CMP_OPERATOR:
case GREATER_THAN:
case LESS_THAN:
case ADD:
case SUBTRACT:
case EXCLUSIVE_OR:
case DIVISION:
case MODULUS:
case BITWISE_AND:
case SHIFT_LEFT:
case SHIFT_RIGHT:
case LONG:
case INCREMENT:
case DECREMENT:
case ONES_COMPLEMENT:
case INT:
case BACKTICK_QUOTED_STRING:
case RE_LITERAL:
case DOUBLE:
case FLOAT:
case TIMESPAN:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
}
}
else if ((LA(1)==LPAREN) && (tokenSet_71_.member(LA(2)))) {
{
lparen = LT(1);
match(LPAREN);
if (0==inputState.guessing)
{
mce = new MethodInvocationExpression(ToLexicalInfo(lparen));
mce.Target = e;
e = mce;
}
{
switch ( LA(1) )
{
case ESEPARATOR:
case CAST:
case CHAR:
case FALSE:
case NOT:
case NULL:
case SELF:
case SUPER:
case THEN:
case TRUE:
case TYPEOF:
case TRIPLE_QUOTED_STRING:
case LPAREN:
case DOUBLE_QUOTED_STRING:
case SINGLE_QUOTED_STRING:
case ID:
case MULTIPLY:
case LBRACK:
case SPLICE_BEGIN:
case DOT:
case LBRACE:
case QQ_BEGIN:
case SUBTRACT:
case LONG:
case INCREMENT:
case DECREMENT:
case ONES_COMPLEMENT:
case INT:
case BACKTICK_QUOTED_STRING:
case RE_LITERAL:
case DOUBLE:
case FLOAT:
case TIMESPAN:
{
argument(mce);
{ // ( ... )*
for (;;)
{
if ((LA(1)==COMMA))
{
match(COMMA);
argument(mce);
}
else
{
goto _loop600_breakloop;
}
}
_loop600_breakloop: ;
} // ( ... )*
break;
}
case RPAREN:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
match(RPAREN);
{
switch ( LA(1) )
{
case NULLABLE_SUFFIX:
{
match(NULLABLE_SUFFIX);
if (0==inputState.guessing)
{
ue = new UnaryExpression(e.LexicalInfo);
ue.Operator = UnaryOperatorType.SafeAccess;
ue.Operand = e;
e = ue;
}
break;
}
case EOF:
case DEDENT:
case ESEPARATOR:
case EOL:
case ASSEMBLY_ATTRIBUTE_BEGIN:
case MODULE_ATTRIBUTE_BEGIN:
case ABSTRACT:
case AND:
case AS:
case BREAK:
case CONTINUE:
case CALLABLE:
case CAST:
case CHAR:
case CLASS:
case DEF:
case DO:
case ELSE:
case ENUM:
case EVENT:
case FINAL:
case FOR:
case FALSE:
case GOTO:
case INTERFACE:
case INTERNAL:
case IS:
case ISA:
case IF:
case IN:
case NEW:
case NOT:
case NULL:
case OF:
case OR:
case OVERRIDE:
case PARTIAL:
case PUBLIC:
case PROTECTED:
case PRIVATE:
case RAISE:
case RETURN:
case SELF:
case SUPER:
case STATIC:
case STRUCT:
case THEN:
case TRY:
case TRANSIENT:
case TRUE:
case TYPEOF:
case UNLESS:
case VIRTUAL:
case WHILE:
case YIELD:
case TRIPLE_QUOTED_STRING:
case EOS:
case LPAREN:
case RPAREN:
case DOUBLE_QUOTED_STRING:
case SINGLE_QUOTED_STRING:
case ID:
case MULTIPLY:
case LBRACK:
case RBRACK:
case ASSIGN:
case COMMA:
case SPLICE_BEGIN:
case DOT:
case COLON:
case EXPONENTIATION:
case BITWISE_OR:
case LBRACE:
case RBRACE:
case QQ_BEGIN:
case QQ_END:
case INPLACE_BITWISE_OR:
case INPLACE_EXCLUSIVE_OR:
case INPLACE_BITWISE_AND:
case INPLACE_SHIFT_LEFT:
case INPLACE_SHIFT_RIGHT:
case CMP_OPERATOR:
case GREATER_THAN:
case LESS_THAN:
case ADD:
case SUBTRACT:
case EXCLUSIVE_OR:
case DIVISION:
case MODULUS:
case BITWISE_AND:
case SHIFT_LEFT:
case SHIFT_RIGHT:
case LONG:
case INCREMENT:
case DECREMENT:
case ONES_COMPLEMENT:
case INT:
case BACKTICK_QUOTED_STRING:
case RE_LITERAL:
case DOUBLE:
case FLOAT:
case TIMESPAN:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
{
if ((LA(1)==LBRACE) && (tokenSet_72_.member(LA(2))))
{
{
bool synPredMatched605 = false;
if (((LA(1)==LBRACE) && (tokenSet_72_.member(LA(2)))))
{
int _m605 = mark();
synPredMatched605 = true;
inputState.guessing++;
try {
{
hash_literal_test();
}
}
catch (RecognitionException)
{
synPredMatched605 = false;
}
rewind(_m605);
inputState.guessing--;
}
if ( synPredMatched605 )
{
initializer=hash_literal();
}
else if ((LA(1)==LBRACE) && (tokenSet_72_.member(LA(2)))) {
initializer=list_initializer();
}
else
{
throw new NoViableAltException(LT(1), getFilename());
}
}
if (0==inputState.guessing)
{
e = new CollectionInitializationExpression(e, initializer);
}
}
else if ((tokenSet_73_.member(LA(1))) && (tokenSet_15_.member(LA(2)))) {
}
else
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
}
else
{
goto _loop606_breakloop;
}
}
_loop606_breakloop: ;
} // ( ... )*
}
catch (RecognitionException ex)
{
if (0 == inputState.guessing)
{
reportError(ex, "slicing_expression");
recover(ex,tokenSet_74_);
}
else
{
throw ex;
}
}
return e;
}