public ES3Parser.leftHandSideExpression_return leftHandSideExpression() // throws RecognitionException [1]
{
ES3Parser.leftHandSideExpression_return retval = new ES3Parser.leftHandSideExpression_return();
retval.Start = input.LT(1);
object root_0 = null;
IToken id = null;
IToken LBRACK28 = null;
IToken RBRACK29 = null;
IToken DOT30 = null;
ES3Parser.memberExpression_return mem = default(ES3Parser.memberExpression_return);
ES3Parser.generics_return gen = default(ES3Parser.generics_return);
ES3Parser.arguments_return arg = default(ES3Parser.arguments_return);
ES3Parser.expression_return exp = default(ES3Parser.expression_return);
object id_tree=null;
object LBRACK28_tree=null;
object RBRACK29_tree=null;
object DOT30_tree=null;
List<Expression> gens = new List<Expression>();
try
{
// C:\\Users\\s.ros\\Projets\\Jint\\Jint\\ES3.g:1067:2: ( (mem= memberExpression ) ( (gen= generics )? arg= arguments | LBRACK exp= expression RBRACK | DOT id= Identifier )* )
// C:\\Users\\s.ros\\Projets\\Jint\\Jint\\ES3.g:1068:2: (mem= memberExpression ) ( (gen= generics )? arg= arguments | LBRACK exp= expression RBRACK | DOT id= Identifier )*
{
root_0 = (object)adaptor.GetNilNode();
// C:\\Users\\s.ros\\Projets\\Jint\\Jint\\ES3.g:1068:2: (mem= memberExpression )
// C:\\Users\\s.ros\\Projets\\Jint\\Jint\\ES3.g:1069:3: mem= memberExpression
{
PushFollow(FOLLOW_memberExpression_in_leftHandSideExpression3689);
mem = memberExpression();
state.followingStackPointer--;
adaptor.AddChild(root_0, mem.Tree);
retval.value = mem.value;
}
// C:\\Users\\s.ros\\Projets\\Jint\\Jint\\ES3.g:1071:2: ( (gen= generics )? arg= arguments | LBRACK exp= expression RBRACK | DOT id= Identifier )*
do
{
int alt21 = 4;
switch ( input.LA(1) )
{
case LBRACE:
case LPAREN:
{
alt21 = 1;
}
break;
case LBRACK:
{
alt21 = 2;
}
break;
case DOT:
{
alt21 = 3;
}
break;
}
switch (alt21)
{
case 1 :
// C:\\Users\\s.ros\\Projets\\Jint\\Jint\\ES3.g:1072:3: (gen= generics )? arg= arguments
{
// C:\\Users\\s.ros\\Projets\\Jint\\Jint\\ES3.g:1072:3: (gen= generics )?
int alt20 = 2;
int LA20_0 = input.LA(1);
if ( (LA20_0 == LBRACE) )
{
alt20 = 1;
}
switch (alt20)
{
case 1 :
// C:\\Users\\s.ros\\Projets\\Jint\\Jint\\ES3.g:1072:4: gen= generics
{
PushFollow(FOLLOW_generics_in_leftHandSideExpression3705);
gen = generics();
state.followingStackPointer--;
adaptor.AddChild(root_0, gen.Tree);
gens = gen.value;
}
break;
}
PushFollow(FOLLOW_arguments_in_leftHandSideExpression3714);
arg = arguments();
state.followingStackPointer--;
adaptor.AddChild(root_0, arg.Tree);
if(retval.value is NewExpression) { ((NewExpression)retval.value).Generics = gens; ((NewExpression)retval.value).Arguments = arg.value; retval.value = new MemberExpression(retval.value, null); } else { retval.value = new MemberExpression(new MethodCall(arg.value) { Generics = gens }, retval.value); }
}
break;
case 2 :
// C:\\Users\\s.ros\\Projets\\Jint\\Jint\\ES3.g:1074:5: LBRACK exp= expression RBRACK
{
LBRACK28=(IToken)Match(input,LBRACK,FOLLOW_LBRACK_in_leftHandSideExpression3725);
LBRACK28_tree = (object)adaptor.Create(LBRACK28);
adaptor.AddChild(root_0, LBRACK28_tree);
PushFollow(FOLLOW_expression_in_leftHandSideExpression3729);
exp = expression();
state.followingStackPointer--;
adaptor.AddChild(root_0, exp.Tree);
RBRACK29=(IToken)Match(input,RBRACK,FOLLOW_RBRACK_in_leftHandSideExpression3731);
RBRACK29_tree = (object)adaptor.Create(RBRACK29);
adaptor.AddChild(root_0, RBRACK29_tree);
retval.value = new MemberExpression(new Indexer(exp.value), retval.value);
}
break;
case 3 :
// C:\\Users\\s.ros\\Projets\\Jint\\Jint\\ES3.g:1076:5: DOT id= Identifier
{
DOT30=(IToken)Match(input,DOT,FOLLOW_DOT_in_leftHandSideExpression3744);
DOT30_tree = (object)adaptor.Create(DOT30);
adaptor.AddChild(root_0, DOT30_tree);
id=(IToken)Match(input,Identifier,FOLLOW_Identifier_in_leftHandSideExpression3748);
id_tree = (object)adaptor.Create(id);
adaptor.AddChild(root_0, id_tree);
if(retval.value is NewExpression) { ((NewExpression)retval.value).Expression = new MemberExpression(new PropertyExpression(id.Text), ((NewExpression)retval.value).Expression); } else { retval.value = new MemberExpression(new PropertyExpression(id.Text), retval.value); }
}
break;
default:
goto loop21;
}
} while (true);
loop21:
; // Stops C# compiler whining that label 'loop21' has no statements
}
retval.Stop = input.LT(-1);
retval.Tree = (object)adaptor.RulePostProcessing(root_0);
adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);
retval.value.Source = ExtractSourceCode((CommonToken)retval.Start, (CommonToken)retval.Stop);
}
catch (RecognitionException re)
{
ReportError(re);
Recover(input,re);
// Conversion of the second argument necessary, but harmless
retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);
}
finally
{
}
return retval;
}
// $ANTLR end "leftHandSideExpression"