public final Func_declContext func_decl() throws RecognitionException {
		Func_declContext _localctx = new Func_declContext(_ctx, getState());
		enterRule(_localctx, 38, RULE_func_decl);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(256); match(25);
			setState(257); ((Func_declContext)_localctx).any_type = any_type();
			setState(258); ((Func_declContext)_localctx).id = id();
			scope_name=(((Func_declContext)_localctx).id!=null?_input.getText(((Func_declContext)_localctx).id.start,((Func_declContext)_localctx).id.stop):null); current_scope = NewScope(scope_name);NewFunction((((Func_declContext)_localctx).any_type!=null?_input.getText(((Func_declContext)_localctx).any_type.start,((Func_declContext)_localctx).any_type.stop):null),(((Func_declContext)_localctx).id!=null?_input.getText(((Func_declContext)_localctx).id.start,((Func_declContext)_localctx).id.stop):null));
			setState(260); match(6);
			setState(262);
			_la = _input.LA(1);
			if (_la==27 || _la==33) {
				{
				setState(261); param_decl_list();
				}
			}

			setState(264); match(19);
			setState(265); match(31);
			setState(266); func_body();
			setState(267); match(9);
			EndScope();current_function.tempregs=current_register;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}