public Expression unary_expression()
{
Expression expression = null;
IToken token = null;
IToken token2 = null;
try
{
TypeReference reference;
int num = this.LA(1);
switch (num)
{
case 0x4f:
case 80:
case 0x52:
case 0x58:
case 0x67:
expression = this.prefix_unary_expression();
break;
default:
if (((((num != 12) && (num != 15)) && ((num != 0x13) && (num != 0x1b))) && (((num != 0x1d) && (num != 0x27)) && ((num != 40) && (num != 0x2a)))) && ((((num != 0x2c) && (num != 0x3b)) && ((num != 60) && (num != 0x3d))) && ((((num != 0x3f) && (num != 0x44)) && ((num != 0x69) && (num != 0x6a))) && (((num != 0x6b) && (num != 0x6c)) && (num != 0x6d)))))
{
throw new NoViableAltException(this.LT(1), this.getFilename());
}
expression = this.postfix_unary_expression();
break;
}
if ((this.LA(1) == 4) && ((this.LA(2) == 0x13) || (this.LA(2) == 0x3b)))
{
token = this.LT(1);
this.match(4);
reference = this.type_reference();
if (base.inputState.guessing == 0)
{
TryCastExpression expression2;
TryCastExpression expression1 = expression2 = new TryCastExpression(ToLexicalInfo(token));
expression2.set_Target(expression);
expression2.set_Type(reference);
expression = expression2;
}
return expression;
}
if ((this.LA(1) == 6) && ((this.LA(2) == 0x13) || (this.LA(2) == 0x3b)))
{
token2 = this.LT(1);
this.match(6);
reference = this.type_reference();
if (base.inputState.guessing == 0)
{
CastExpression expression3;
CastExpression expression6 = expression3 = new CastExpression(ToLexicalInfo(token2));
expression3.set_Target(expression);
expression3.set_Type(reference);
expression = expression3;
}
return expression;
}
if (!tokenSet_20_.member(this.LA(1)) || !tokenSet_28_.member(this.LA(2)))
{
throw new NoViableAltException(this.LT(1), this.getFilename());
}
return expression;
}
catch (RecognitionException exception)
{
if (base.inputState.guessing != 0)
{
throw;
}
this.reportError(exception);
this.recover(exception, tokenSet_20_);
return expression;
}
return expression;
}