Package jflex.core

Class RegExp

java.lang.Object
jflex.core.RegExp
Direct Known Subclasses:
RegExp1, RegExp2

public class RegExp extends Object
Stores a regular expression of rules section in a JFlex-specification.

This base class has no content other than its type.

Version:
JFlex 1.9.1
  • Field Details

    • type

      int type
      The type of the regular expression. This field will be filled with values from class sym.java (generated by cup)
  • Constructor Details

    • RegExp

      public RegExp(int type)
      Create a new regular expression of the specified type.
      Parameters:
      type - a value from the cup generated class sym.
  • Method Details

    • print

      public String print(String tab)
      Returns a String-representation of this regular expression with the specified indentation.
      Parameters:
      tab - a String that should contain only space characters and that is inserted in front of standard String-representation pf this object.
      Returns:
      a String object.
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • typeName

      public String typeName()
      String representation of the type of this regular expression.
    • isCharClass

      public boolean isCharClass()
      Find out if this regexp is a char class or equivalent to one.
      Returns:
      true if the regexp is equivalent to a char class.
    • size

      public int size(Macros macros)
      The approximate number of NFA states this expression will need (only works correctly after macro expansion and without negation)
      Parameters:
      macros - macro table for expansion
      Returns:
      a int.
    • revString

      static String revString(String s)
      Reverses a string.
    • resolveTilde

      public final RegExp resolveTilde()
      Recursively convert tilde (upto) expressions into negation and star.
      Returns:
      new RegExp equivalent to the current one, but without upto expressions.
    • anyChar

      public static RegExp anyChar()
      Returns a regexp that matches any character: [^]
      Returns:
      the regexp for [^]
    • checkPrimClass

      public static RegExp1 checkPrimClass(RegExp r)
      Confirms that the parameter is a RegExp1 of type sym.PRIMCLASS.
      Parameters:
      r - the RegExp to check
      Returns:
      r cast to RegExp1
      Throws:
      CharClassException - if r is not a RegExp1 or of type sym.PRIMCLASS.
    • performClassOp

      public static IntCharSet performClassOp(int op, IntCharSet l, IntCharSet r, RegExp ctxt)
      Performs the given set operation on the two IntCharSet parameters.
      Parameters:
      op - the operation to perform (as @{link sym} constant)
      l - the left operator of the expression
      r - the right operator of the expression
      ctxt - the regular expression containing the provided operator
      Returns:
      a new IntCharSet
      Throws:
      RegExpException - for ctxt if the operator is not supported
    • normaliseMacros

      public final RegExp normaliseMacros(Macros m)
      Normalise the regular expression to eliminate macro use (expand them).
      Returns:
      a regexp that contains no sym.MACROUSE.
    • normaliseCCLs

      public final RegExp normaliseCCLs(File f, int line)
      Normalise the regular expression to eliminate compound character class expression (compute their content).
      Parameters:
      f - the spec file containing the regular expression (for error reporting)
      line - the line number of the regular expression (for error reporting)
      Returns:
      a regexp where all char classes are primitive IntCharSet classes.
    • expandPreClasses

      public RegExp expandPreClasses(Map<Integer,IntCharSet> cache, CharClasses cl, boolean caseless)
      Expand pre-defined character classes into primitive IntCharSet classes.
      Parameters:
      cache - memoized pre-defined character class expansions
      cl - character class partitions
      Returns:
      the expanded regular expression
    • checkJPartStart

      private static boolean checkJPartStart(int type, int c)
      Check whether a character is a member of the give char class type.
      Parameters:
      type - the type of the character class (sym.JLETTERCLASS or sym.JLETTERDIGITCLASS)
      c - the character to check
      Returns:
      true if the character is a member of the class
    • getPreClass

      private static IntCharSet getPreClass(Map<Integer,IntCharSet> preclassCache, CharClasses charClasses, int type)
      Compute and memoize a pre-defined character class.
      Parameters:
      preclassCache - memoized pre-defined character class expansions
      charClasses - character class partitions
      type - the type of the predefined character class
      Returns:
      the expanded IntCharSet for the class
    • makeCCLs

      public final void makeCCLs(CharClasses c, boolean caseless)
      Make character class partitions based on the classes mentioned in this regexp.

      Assumption: regexp is normalised.

    • rev

      public final RegExp rev()
      Creates a new regexp that matches the reverse text of this one.
      Returns:
      the reverse regexp