Package java_cup

Class lr_item_core

java.lang.Object
java_cup.lr_item_core
Direct Known Subclasses:
lalr_item

public class lr_item_core extends Object
The "core" of an LR item. This includes a production and the position of a marker (the "dot") within the production. Typically item cores are written using a production with an embedded "dot" to indicate their position. For example:
     A ::= B * C d E
  
This represents a point in a parse where the parser is trying to match the given production, and has succeeded in matching everything before the "dot" (and hence is expecting to see the symbols after the dot next). See lalr_item, lalr_item_set, and lalr_start for full details on the meaning and use of items.
See Also:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected int
    Cache of the hash code.
    protected int
    The position of the "dot" -- this indicates the part of the production that the marker is before, so 0 indicates a dot at the beginning of the RHS.
    protected symbol
    Cache of symbol after the dot.
    protected production
    The production for the item.
  • Constructor Summary

    Constructors
    Constructor
    Description
    Constructor for dot at start of right hand side.
    lr_item_core(production prod, int pos)
    Full constructor.
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
    Equality comparison for the core only.
    int
    Hash code for the core (separated so we keep non overridden version).
    boolean
    Is the dot at the end of the production?
    Determine if we have a dot before a non terminal, and if so which one (return null or the non terminal).
    int
    The position of the "dot" -- this indicates the part of the production that the marker is before, so 0 indicates a dot at the beginning of the RHS.
    boolean
    Equality comparison.
    boolean
    equals(Object other)
    Generic equality comparison.
    int
    Hash code for the item.
    protected int
    Return the hash code that object would have provided for us so we have a (nearly) unique id for debugging.
    Produce a new lr_item_core that results from shifting the dot one position to the right.
    Return the symbol after the dot.
    The production for the item.
    Convert to a string (separated out from toString() so we can call it from subclass that overrides toString()).
    Convert to a string

    Methods inherited from class java.lang.Object

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
  • Field Details

    • _the_production

      protected production _the_production
      The production for the item.
    • _dot_pos

      protected int _dot_pos
      The position of the "dot" -- this indicates the part of the production that the marker is before, so 0 indicates a dot at the beginning of the RHS.
    • _core_hash_cache

      protected int _core_hash_cache
      Cache of the hash code.
    • _symbol_after_dot

      protected symbol _symbol_after_dot
      Cache of symbol after the dot.
  • Constructor Details

    • lr_item_core

      public lr_item_core(production prod, int pos) throws internal_error
      Full constructor.
      Parameters:
      prod - production this item uses.
      pos - position of the "dot" within the item.
      Throws:
      internal_error
    • lr_item_core

      public lr_item_core(production prod) throws internal_error
      Constructor for dot at start of right hand side.
      Parameters:
      prod - production this item uses.
      Throws:
      internal_error
  • Method Details

    • the_production

      public production the_production()
      The production for the item.
    • dot_pos

      public int dot_pos()
      The position of the "dot" -- this indicates the part of the production that the marker is before, so 0 indicates a dot at the beginning of the RHS.
    • dot_at_end

      public boolean dot_at_end()
      Is the dot at the end of the production?
    • symbol_after_dot

      public symbol symbol_after_dot()
      Return the symbol after the dot. If there is no symbol after the dot we return null.
    • dot_before_nt

      public non_terminal dot_before_nt()
      Determine if we have a dot before a non terminal, and if so which one (return null or the non terminal).
    • shift_core

      public lr_item_core shift_core() throws internal_error
      Produce a new lr_item_core that results from shifting the dot one position to the right.
      Throws:
      internal_error
    • core_equals

      public boolean core_equals(lr_item_core other)
      Equality comparison for the core only. This is separate out because we need separate access in a super class.
    • equals

      public boolean equals(lr_item_core other)
      Equality comparison.
    • equals

      public boolean equals(Object other)
      Generic equality comparison.
      Overrides:
      equals in class Object
    • core_hashCode

      public int core_hashCode()
      Hash code for the core (separated so we keep non overridden version).
    • hashCode

      public int hashCode()
      Hash code for the item.
      Overrides:
      hashCode in class Object
    • obj_hash

      protected int obj_hash()
      Return the hash code that object would have provided for us so we have a (nearly) unique id for debugging.
    • to_simple_string

      public String to_simple_string() throws internal_error
      Convert to a string (separated out from toString() so we can call it from subclass that overrides toString()).
      Throws:
      internal_error
    • toString

      public String toString()
      Convert to a string
      Overrides:
      toString in class Object