ES3Parser.assignmentExpression C# (CSharp) Method

assignmentExpression() public method

public assignmentExpression ( ) : ES3Parser.assignmentExpression_return
return ES3Parser.assignmentExpression_return
    public ES3Parser.assignmentExpression_return assignmentExpression() // throws RecognitionException [1]
    {   
        ES3Parser.assignmentExpression_return retval = new ES3Parser.assignmentExpression_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        ES3Parser.conditionalExpression_return lhs = default(ES3Parser.conditionalExpression_return);

        ES3Parser.assignmentOperator_return ass = default(ES3Parser.assignmentOperator_return);

        ES3Parser.assignmentExpression_return exp = default(ES3Parser.assignmentExpression_return);




        	Object[] isLhs = new Object[1];
        	var assignment = new AssignmentExpression();

        try 
    	{
            // C:\\Users\\s.ros\\Projets\\Jint\\Jint\\ES3.g:1316:2: (lhs= conditionalExpression ({...}?ass= assignmentOperator exp= assignmentExpression )? )
            // C:\\Users\\s.ros\\Projets\\Jint\\Jint\\ES3.g:1316:4: lhs= conditionalExpression ({...}?ass= assignmentOperator exp= assignmentExpression )?
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_conditionalExpression_in_assignmentExpression4912);
            	lhs = conditionalExpression();
            	state.followingStackPointer--;

            	adaptor.AddChild(root_0, lhs.Tree);
            	 retval.value =  assignment.Left = lhs.value; 
            	// C:\\Users\\s.ros\\Projets\\Jint\\Jint\\ES3.g:1317:2: ({...}?ass= assignmentOperator exp= assignmentExpression )?
            	int alt52 = 2;
            	int LA52_0 = input.LA(1);

            	if ( ((LA52_0 >= ASSIGN && LA52_0 <= XORASS) || LA52_0 == DIVASS) )
            	{
            	    int LA52_1 = input.LA(2);

            	    if ( (( IsLeftHandSideAssign(lhs.value, isLhs) )) )
            	    {
            	        alt52 = 1;
            	    }
            	}
            	switch (alt52) 
            	{
            	    case 1 :
            	        // C:\\Users\\s.ros\\Projets\\Jint\\Jint\\ES3.g:1317:5: {...}?ass= assignmentOperator exp= assignmentExpression
            	        {
            	        	if ( !(( IsLeftHandSideAssign(lhs.value, isLhs) )) ) 
            	        	{
            	        	    throw new FailedPredicateException(input, "assignmentExpression", " IsLeftHandSideAssign(lhs.value, isLhs) ");
            	        	}
            	        	PushFollow(FOLLOW_assignmentOperator_in_assignmentExpression4924);
            	        	ass = assignmentOperator();
            	        	state.followingStackPointer--;

            	        	root_0 = (object)adaptor.BecomeRoot(ass.Tree, root_0);
            	        	 assignment.AssignmentOperator = ResolveAssignmentOperator(((ass != null) ? input.ToString((IToken)(ass.Start),(IToken)(ass.Stop)) : null)); 
            	        	PushFollow(FOLLOW_assignmentExpression_in_assignmentExpression4931);
            	        	exp = assignmentExpression();
            	        	state.followingStackPointer--;

            	        	adaptor.AddChild(root_0, exp.Tree);
            	        	  assignment.Right = exp.value; retval.value =  assignment; 

            	        }
            	        break;

            	}


            }

            retval.Stop = input.LT(-1);

            	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) 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 "assignmentExpression"
ES3Parser