/*
 * Copyright © 2002 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
 * California 95054, U.S.A. All rights reserved.  Sun Microsystems, Inc. has
 * intellectual property rights relating to technology embodied in the product
 * that is described in this document. In particular, and without limitation,
 * these intellectual property rights may include one or more of the U.S.
 * patents listed at http://www.sun.com/patents and one or more additional
 * patents or pending patent applications in the U.S. and in other countries.
 * U.S. Government Rights - Commercial software. Government users are subject
 * to the Sun Microsystems, Inc. standard license agreement and applicable
 * provisions of the FAR and its supplements.  Use is subject to license terms.
 * Sun,  Sun Microsystems,  the Sun logo and  Java are trademarks or registered
 * trademarks of Sun Microsystems, Inc. in the U.S. and other countries.  This
 * product is covered and controlled by U.S. Export Control laws and may be
 * subject to the export or import laws in other countries.  Nuclear, missile,
 * chemical biological weapons or nuclear maritime end uses or end users,
 * whether direct or indirect, are strictly prohibited.  Export or reexport
 * to countries subject to U.S. embargo or to entities identified on U.S.
 * export exclusion lists, including, but not limited to, the denied persons
 * and specially designated nationals lists is strictly prohibited.
 */

package org.javacc.parser;

/**
 * Describes regular expressions.
 */

abstract public class RegularExpression extends Expansion {

  /**
   * The label of the regular expression (if any).  If no label is
   * present, this is set to "".
   */
  public String label = "";

  /**
   * The ordinal value assigned to the regular expression.  It is
   * used for internal processing and passing information between
   * the parser and the lexical analyzer.
   */
  int ordinal;

  /**
   * The LHS to which the token value of the regular expression
   * is assigned.  In case there is no LHS, then the vector
   * remains empty.
   */
  public java.util.Vector lhsTokens = new java.util.Vector();

  /**
	* We now allow qualified access to token members. Store it here.
   */
  public Token rhsToken;

  /**
   * This flag is set if the regular expression has a label prefixed
   * with the # symbol - this indicates that the purpose of the regular
   * expression is solely for defining other regular expressions.
   */
  public boolean private_rexp = false;

  /**
   * If this is a top-level regular expression (nested directly
   * within a TokenProduction), then this field point to that
   * TokenProduction object.
   */
  public TokenProduction tpContext = null;

  abstract public Nfa GenerateNfa(boolean ignoreCase);

  public boolean CanMatchAnyChar()
  {
     return false;
  }

  /**
   * The following variable is used to maintain state information for the
   * loop determination algorithm:  It is initialized to 0, and
   * set to -1 if this node has been visited in a pre-order walk, and then
   * it is set to 1 if the pre-order walk of the whole graph from this
   * node has been traversed.  i.e., -1 indicates partially processed,
   * and 1 indicates fully processed.
   */
  int walkStatus = 0;

}
