// $ANTLR start "expression"
	// SimpleExpression.g3:43:0: public expression : additive_expression EOF ;
	public SimpleExpressionParser.expression_return expression()
	{
		SimpleExpressionParser.expression_return retval = new SimpleExpressionParser.expression_return();
		retval.start = input.LT(1);

		CommonTree root_0 = null;

		IToken EOF2=null;
		SimpleExpressionParser.additive_expression_return additive_expression1 = default(SimpleExpressionParser.additive_expression_return);

		CommonTree EOF2_tree=null;

		try
		{
			// SimpleExpression.g3:44:4: ( additive_expression EOF )
			// SimpleExpression.g3:44:4: additive_expression EOF
			{
			root_0 = (CommonTree)adaptor.Nil();

			PushFollow(Follow._additive_expression_in_expression39);
			additive_expression1=additive_expression();
			PopFollow();

			adaptor.AddChild(root_0, additive_expression1.Tree);
			EOF2=(IToken)Match(input,EOF,Follow._EOF_in_expression43); 
			EOF2_tree = (CommonTree)adaptor.Create(EOF2);
			adaptor.AddChild(root_0, EOF2_tree);


			}

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

			retval.tree = (CommonTree)adaptor.RulePostProcessing(root_0);
			adaptor.SetTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re)
		{
			ReportError(re);
			Recover(input,re);
		retval.tree = (CommonTree)adaptor.ErrorNode(input, retval.start, input.LT(-1), re);

		}
		finally
		{
		}
		return retval;

	}
    // $ANTLR start "expression"
    // SimpleExpression.g3:43:0: public expression : additive_expression EOF ;
    public SimpleExpressionParser.expression_return expression()
    {
        SimpleExpressionParser.expression_return retval = new SimpleExpressionParser.expression_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        IToken EOF2 = null;

        SimpleExpressionParser.additive_expression_return additive_expression1 = default(SimpleExpressionParser.additive_expression_return);

        CommonTree EOF2_tree = null;

        try
        {
            // SimpleExpression.g3:44:4: ( additive_expression EOF )
            // SimpleExpression.g3:44:4: additive_expression EOF
            {
                root_0 = (CommonTree)adaptor.Nil();

                PushFollow(Follow._additive_expression_in_expression39);
                additive_expression1 = additive_expression();
                PopFollow();

                adaptor.AddChild(root_0, additive_expression1.Tree);
                EOF2      = (IToken)Match(input, EOF, Follow._EOF_in_expression43);
                EOF2_tree = (CommonTree)adaptor.Create(EOF2);
                adaptor.AddChild(root_0, EOF2_tree);
            }

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

            retval.tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            adaptor.SetTokenBoundaries(retval.tree, retval.start, retval.stop);
        }
        catch (RecognitionException re)
        {
            ReportError(re);
            Recover(input, re);
            retval.tree = (CommonTree)adaptor.ErrorNode(input, retval.start, input.LT(-1), re);
        }
        finally
        {
        }
        return(retval);
    }