content: package java_cup.runtime;
  
  /**
   * Creates the Symbols interface, which CUP uses as default
   *
   * @version last updated 27-03-2006
   * @author Michael Petter
   */
  
  /* *************************************************
    Interface SymbolFactory
    
    interface for creating new symbols  
    You can also use this interface for your own callback hooks
    Declare Your own factory methods for creation of Objects in Your scanner!
   ***************************************************/
  public interface SymbolFactory {
      // Factory methods
      /**
       * newSymbol
       * creates a symbol with a value, grouping other symbols with left/right locations;
       * used frequently by the parser to implement non-terminal symbols
       * @param name    Textual name for the Symbol for verbose error messages
       * @param id      enum value associated with this symbol, generated by cup via sym.java
       * @param left    symbol, to take the left location from
       * @param right   symbol, to take the right location from
       * @param value   value, attached to this symbol
       */
      public Symbol newSymbol(String name, int id, Symbol left, Symbol right, Object value);
      /**
       * newSymbol
       * creates a symbol, grouping other symbols with left/right locations;
       * used frequently by the parser to implement non-terminal symbols
       * @param name    Textual name for the Symbol for verbose error messages
       * @param id      enum value associated with this symbol, generated by cup via sym.java
       * @param left    symbol, to take the left location from
       * @param right   symbol, to take the right location from
       */
      public Symbol newSymbol(String name, int id, Symbol left, Symbol right);
      /**
       * newSymbol
       * creates a symbol for an empty production, taking its location from the Symbol on the left
       * @param name    Textual name for the Symbol for verbose error messages
       * @param id      enum value associated with this symbol, generated by cup via sym.java
       * @param left    symbol, to take the left location from
       * @param value   value, attached to this symbol 
       */
      public Symbol newSymbol(String name, int id, Symbol left, Object value);
      /**
       * newSymbol
       * creates a basic symbol with an attached value;
       * used frequently for terminal symbols like identifiers
       * @param name    Textual name for the Symbol for verbose error messages
       * @param id      enum value associated with this symbol, generated by cup via sym.java
       * @param value   value, attached to this symbol
       */
      public Symbol newSymbol(String name, int id, Object value);
      /**
       * newSymbol
       * creates a basic symbol;
       * used frequently for terminal symbols, like keywords
       * @param name    Textual name for the Symbol for verbose error messages
       * @param id      enum value associated with this symbol, generated by cup via sym.java
       * @param value   value, attached to this symbol
       */
      public Symbol newSymbol(String name, int id);
      /**
       * newSymbol
       * creates the start symbol
       * @param name    Textual name for the Symbol for verbose error messages
       * @param id      enum value associated with this symbol, generated by cup via sym.java
       * @param left    symbol, to take the left location from
       * @param right   symbol, to take the right location from
       * @param value   value, attached to this symbol
       */
      public Symbol startSymbol(String name, int id, int state);
  }
  