All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.javacc.jjdoc.JJDocMain Maven / Gradle / Ivy

There is a newer version: 4.1.5
Show newest version
/* Copyright (c) 2006, Sun Microsystems, Inc.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *     * Redistributions of source code must retain the above copyright notice,
 *       this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer in the
 *       documentation and/or other materials provided with the distribution.
 *     * Neither the name of the Sun Microsystems, Inc. nor the names of its
 *       contributors may be used to endorse or promote products derived from
 *       this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 * THE POSSIBILITY OF SUCH DAMAGE.
 */

package org.javacc.jjdoc;

import org.javacc.parser.JavaCCErrors;
import org.javacc.parser.JavaCCParser;
import org.javacc.parser.Main;
import org.javacc.parser.Options;

/**
 * Main class.
 */
public final class JJDocMain extends JJDocGlobals
{

  private JJDocMain ()
  {}

  static void help_message ()
  {
    info ("");
    info ("    jjdoc option-settings - (to read from standard input)");
    info ("OR");
    info ("    jjdoc option-settings inputfile (to read from a file)");
    info ("");
    info ("WHERE");
    info ("    \"option-settings\" is a sequence of settings separated by spaces.");
    info ("");

    info ("Each option setting must be of one of the following forms:");
    info ("");
    info ("    -optionname=value (e.g., -TEXT=false)");
    info ("    -optionname:value (e.g., -TEXT:false)");
    info ("    -optionname       (equivalent to -optionname=true.  e.g., -TEXT)");
    info ("    -NOoptionname     (equivalent to -optionname=false. e.g., -NOTEXT)");
    info ("");
    info ("Option settings are not case-sensitive, so one can say \"-nOtExT\" instead");
    info ("of \"-NOTEXT\".  Option values must be appropriate for the corresponding");
    info ("option, and must be either an integer, boolean or string value.");
    info ("");
    info ("The string valued options are:");
    info ("");
    info ("    OUTPUT_FILE");
    info ("    CSS");
    info ("");
    info ("The boolean valued options are:");
    info ("");
    info ("    ONE_TABLE              (default true)");
    info ("    TEXT                   (default false)");
    info ("    BNF                    (default false)");
    info ("");

    info ("");
    info ("EXAMPLES:");
    info ("    jjdoc -ONE_TABLE=false mygrammar.jj");
    info ("    jjdoc - < mygrammar.jj");
    info ("");
    info ("ABOUT JJDoc:");
    info ("    JJDoc generates JavaDoc documentation from JavaCC grammar files.");
    info ("");
    info ("    For more information, see the online JJDoc documentation at");
    info ("    https://javacc.dev.java.net/doc/JJDoc.html");
  }

  /**
   * A main program that exercises the parser.
   */
  public static void main (final String args[]) throws Exception
  {
    final int errorcode = mainProgram (args);
    System.exit (errorcode);
  }

  /**
   * The method to call to exercise the parser from other Java programs. It
   * returns an error code. See how the main program above uses this method.
   */
  public static int mainProgram (final String args[]) throws Exception
  {

    Main.reInitAll ();
    JJDocOptions.init ();

    bannerLine ("Documentation Generator", "0.1.4");

    JavaCCParser parser = null;
    if (args.length == 0)
    {
      help_message ();
      return 1;
    }
    else
    {
      info ("(type \"jjdoc\" with no arguments for help)");
    }

    if (Options.isOption (args[args.length - 1]))
    {
      error ("Last argument \"" + args[args.length - 1] + "\" is not a filename or \"-\".  ");
      return 1;
    }
    for (int arg = 0; arg < args.length - 1; arg++)
    {
      if (!Options.isOption (args[arg]))
      {
        error ("Argument \"" + args[arg] + "\" must be an option setting.  ");
        return 1;
      }
      Options.setCmdLineOption (args[arg]);
    }

    if (args[args.length - 1].equals ("-"))
    {
      info ("Reading from standard input . . .");
      parser = new JavaCCParser (new java.io.DataInputStream (System.in));
      JJDocGlobals.input_file = "standard input";
      JJDocGlobals.output_file = "standard output";
    }
    else
    {
      info ("Reading from file " + args[args.length - 1] + " . . .");
      try
      {
        final java.io.File fp = new java.io.File (args[args.length - 1]);
        if (!fp.exists ())
        {
          error ("File " + args[args.length - 1] + " not found.");
          return 1;
        }
        if (fp.isDirectory ())
        {
          error (args[args.length - 1] + " is a directory. Please use a valid file name.");
          return 1;
        }
        JJDocGlobals.input_file = fp.getName ();
        parser = new JavaCCParser (new java.io.BufferedReader (new java.io.InputStreamReader (new java.io.FileInputStream (args[args.length - 1]),
                                                                                              Options.getGrammarEncoding ())));
      }
      catch (final SecurityException se)
      {
        error ("Security violation while trying to open " + args[args.length - 1]);
        return 1;
      }
      catch (final java.io.FileNotFoundException e)
      {
        error ("File " + args[args.length - 1] + " not found.");
        return 1;
      }
    }
    try
    {

      parser.javacc_input ();
      JJDoc.start ();

      if (JavaCCErrors.get_error_count () == 0)
      {
        if (JavaCCErrors.get_warning_count () == 0)
        {
          info ("Grammar documentation generated successfully in " + JJDocGlobals.output_file);
        }
        else
        {
          info ("Grammar documentation generated with 0 errors and " + JavaCCErrors.get_warning_count () + " warnings.");
        }
        return 0;
      }
      else
      {
        error ("Detected " +
               JavaCCErrors.get_error_count () +
               " errors and " +
               JavaCCErrors.get_warning_count () +
               " warnings.");
        return (JavaCCErrors.get_error_count () == 0) ? 0 : 1;
      }
    }
    catch (final org.javacc.parser.MetaParseException e)
    {
      error (e.toString ());
      error ("Detected " +
             JavaCCErrors.get_error_count () +
             " errors and " +
             JavaCCErrors.get_warning_count () +
             " warnings.");
      return 1;
    }
    catch (final org.javacc.parser.ParseException e)
    {
      error (e.toString ());
      error ("Detected " +
             (JavaCCErrors.get_error_count () + 1) +
             " errors and " +
             JavaCCErrors.get_warning_count () +
             " warnings.");
      return 1;
    }
  }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy