public final WaiprParser.globalstat_return globalstat() throws RecognitionException {
		WaiprParser.globalstat_return retval = new WaiprParser.globalstat_return();
		retval.start = input.LT(1);

		CommonTree root_0 = null;

		Token char_literal56=null;
		Token ID57=null;

		CommonTree char_literal56_tree=null;
		CommonTree ID57_tree=null;
		RewriteRuleTokenStream stream_14=new RewriteRuleTokenStream(adaptor,"token 14");
		RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");

		try { dbg.enterRule(getGrammarFileName(), "globalstat");
		if ( getRuleLevel()==0 ) {dbg.commence();}
		incRuleLevel();
		dbg.location(49, 0);

		try {
			// C:\\Users\\Gyula\\Documents\\NetBeansProjects\\waiprProg\\src\\waiprprog\\Waipr.g:49:12: ( '!' ID -> ^( ID '!' ) )
			dbg.enterAlt(1);

			// C:\\Users\\Gyula\\Documents\\NetBeansProjects\\waiprProg\\src\\waiprprog\\Waipr.g:49:14: '!' ID
			{
			dbg.location(49,14);
			char_literal56=(Token)match(input,14,FOLLOW_14_in_globalstat371);  
			stream_14.add(char_literal56);
			dbg.location(49,18);
			ID57=(Token)match(input,ID,FOLLOW_ID_in_globalstat373);  
			stream_ID.add(ID57);

			// AST REWRITE
			// elements: 14, ID
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (CommonTree)adaptor.nil();
			// 49:21: -> ^( ID '!' )
			{
				dbg.location(49,24);
				// C:\\Users\\Gyula\\Documents\\NetBeansProjects\\waiprProg\\src\\waiprprog\\Waipr.g:49:24: ^( ID '!' )
				{
				CommonTree root_1 = (CommonTree)adaptor.nil();
				dbg.location(49,26);
				root_1 = (CommonTree)adaptor.becomeRoot(stream_ID.nextNode(), root_1);
				dbg.location(49,29);
				adaptor.addChild(root_1, stream_14.nextNode());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

			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 {
			// do for sure before leaving
		}
		dbg.location(49, 32);

		}
		finally {
			dbg.exitRule(getGrammarFileName(), "globalstat");
			decRuleLevel();
			if ( getRuleLevel()==0 ) {dbg.terminate();}
		}

		return retval;
	}