code: public static Iterator<Token[]> tokenIterator(ItemRule itemRule) {
          Iterator<Token[]> it = null;
          if (itemRule.isListableType()) {
              List<Token[]> list = itemRule.getTokensList();
              if (list != null) {
                  it = list.iterator();
              }
          } else if (itemRule.isMappableType()) {
              Map<String, Token[]> map = itemRule.getTokensMap();
              if (map != null) {
                  it = map.values().iterator();
              }
          } else {
              return new Iterator<Token[]>() {
                  private int count = 0;
                  @Override
                  public boolean hasNext() {
                      return (count++ < 1);
                  }
                  @Override
                  public Token[] next() {
                      return itemRule.getTokens();
                  }
                  @Override
                  public void remove() {
                      throw new UnsupportedOperationException("Cannot remove an element of an array");
                  }
              };
          }
          return it;
      }
docs: Returns a {@code Token} iterator.
  
  @param itemRule the item rule
  @return the iterator for tokens