code: public final hqlParser.optionalFromTokenFromClause2_return optionalFromTokenFromClause2() throws RecognitionException {
  		hqlParser.optionalFromTokenFromClause2_return retval = new hqlParser.optionalFromTokenFromClause2_return();
  		retval.start = input.LT(1);
  
  		CommonTree root_0 = null;
  
  		Token FROM26=null;
  
  		CommonTree FROM26_tree=null;
  
  		try {
  			// hql.g:205:2: ( ( FROM )? )
  			// hql.g:205:4: ( FROM )?
  			{
  			root_0 = (CommonTree)adaptor.nil();
  
  
  			// hql.g:205:4: ( FROM )?
  			int alt7=2;
  			int LA7_0 = input.LA(1);
  			if ( (LA7_0==FROM) ) {
  				alt7=1;
  			}
  			switch (alt7) {
  				case 1 :
  					// hql.g:205:4: FROM
  					{
  					FROM26=(Token)match(input,FROM,FOLLOW_FROM_in_optionalFromTokenFromClause2788);
  					FROM26_tree = (CommonTree)adaptor.create(FROM26);
  					adaptor.addChild(root_0, FROM26_tree);
  
  					}
  					break;
  
  			}
  
  			}
  
  			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
  		}
  		return retval;
  	}
docs: hql.g:204:1: optionalFromTokenFromClause2 : ( FROM )? ;