code: @Override
    public void executeReport (final Locale locale) throws MavenReportException
    {
      final Sink sink = getSink ();
  
      createReportHeader (getBundle (locale), sink);
  
      final File [] sourceDirs = getSourceDirectories ();
      for (final File sourceDir : sourceDirs)
      {
        final GrammarInfo [] grammarInfos = scanForGrammars (sourceDir);
  
        if (grammarInfos == null)
        {
          getLog ().debug ("Skipping non-existing source directory: " + sourceDir);
        }
        else
        {
          Arrays.sort (grammarInfos, GrammarInfoComparator.getInstance ());
          for (final GrammarInfo grammarInfo : grammarInfos)
          {
            final File grammarFile = grammarInfo.getGrammarFile ();
  
            String relativeOutputFileName = grammarInfo.getRelativeGrammarFile ();
            relativeOutputFileName = relativeOutputFileName.replaceAll ("(?i)\\.(jj|jjt|jtb)$",
                                                                        getOutputFileExtension ());
  
            final File jjdocOutputFile = new File (getJJDocOutputDirectory (), relativeOutputFileName);
  
            final JJDoc jjdoc = newJJDoc ();
            jjdoc.setInputFile (grammarFile);
            jjdoc.setOutputFile (jjdocOutputFile);
            try
            {
              jjdoc.run ();
            }
            catch (final Exception e)
            {
              throw new MavenReportException ("Failed to create BNF documentation: " + grammarFile, e);
            }
  
            createReportLink (sink, sourceDir, grammarFile, relativeOutputFileName);
          }
        }
      }
  
      createReportFooter (sink);
      sink.flush ();
      sink.close ();
    }
docs: Run the actual report.
  
  @param locale
  The locale to use for this report.
  @throws MavenReportException
  If the report generation failed.