ES3Parser.leftHandSideExpression C# (CSharp) Method

leftHandSideExpression() public method

public leftHandSideExpression ( ) : ES3Parser.leftHandSideExpression_return
return ES3Parser.leftHandSideExpression_return
    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"
ES3Parser