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

		CommonTree root_0 = null;

		Token char_literal40=null;
		Token char_literal42=null;
		ParserRuleReturnScope trigger39 =null;
		ParserRuleReturnScope trigger41 =null;

		CommonTree char_literal40_tree=null;
		CommonTree char_literal42_tree=null;
		RewriteRuleTokenStream stream_17=new RewriteRuleTokenStream(adaptor,"token 17");
		RewriteRuleTokenStream stream_IE=new RewriteRuleTokenStream(adaptor,"token IE");
		RewriteRuleSubtreeStream stream_trigger=new RewriteRuleSubtreeStream(adaptor,"rule trigger");

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

		try {
			// C:\\Users\\Gyula\\Documents\\NetBeansProjects\\waiprProg\\src\\waiprprog\\Waipr.g:38:9: ( trigger ( ',' trigger )* ';' -> ( trigger )* )
			dbg.enterAlt(1);

			// C:\\Users\\Gyula\\Documents\\NetBeansProjects\\waiprProg\\src\\waiprprog\\Waipr.g:38:11: trigger ( ',' trigger )* ';'
			{
			dbg.location(38,11);
			pushFollow(FOLLOW_trigger_in_triggers274);
			trigger39=trigger();
			state._fsp--;

			stream_trigger.add(trigger39.getTree());dbg.location(38,19);
			// C:\\Users\\Gyula\\Documents\\NetBeansProjects\\waiprProg\\src\\waiprprog\\Waipr.g:38:19: ( ',' trigger )*
			try { dbg.enterSubRule(11);

			loop11:
			while (true) {
				int alt11=2;
				try { dbg.enterDecision(11, decisionCanBacktrack[11]);

				int LA11_0 = input.LA(1);
				if ( (LA11_0==17) ) {
					alt11=1;
				}

				} finally {dbg.exitDecision(11);}

				switch (alt11) {
				case 1 :
					dbg.enterAlt(1);

					// C:\\Users\\Gyula\\Documents\\NetBeansProjects\\waiprProg\\src\\waiprprog\\Waipr.g:38:20: ',' trigger
					{
					dbg.location(38,20);
					char_literal40=(Token)match(input,17,FOLLOW_17_in_triggers277);  
					stream_17.add(char_literal40);
					dbg.location(38,24);
					pushFollow(FOLLOW_trigger_in_triggers279);
					trigger41=trigger();
					state._fsp--;

					stream_trigger.add(trigger41.getTree());
					}
					break;

				default :
					break loop11;
				}
			}
			} finally {dbg.exitSubRule(11);}
			dbg.location(38,34);
			char_literal42=(Token)match(input,IE,FOLLOW_IE_in_triggers283);  
			stream_IE.add(char_literal42);

			// AST REWRITE
			// elements: trigger
			// 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();
			// 38:38: -> ( trigger )*
			{
				dbg.location(38,41);
				// C:\\Users\\Gyula\\Documents\\NetBeansProjects\\waiprProg\\src\\waiprprog\\Waipr.g:38:41: ( trigger )*
				while ( stream_trigger.hasNext() ) {
					dbg.location(38,41);
					adaptor.addChild(root_0, stream_trigger.nextTree());
				}
				stream_trigger.reset();

			}


			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(38, 48);

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

		return retval;
	}